You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:JSON数据重复校验仅单条有效,多条失效求助

解决多数据下NIM与房间号的重复校验问题

我看了你的代码和返回的JSON数据,一下子就找到问题所在啦!你现在的校验逻辑失效,是因为在遍历JSON数组的时候,每次循环都把ruangan和nimMahasiswa这两个变量的值覆盖成当前元素的内容,最后这两个变量只会保存最后一条数据的信息。所以当数据库里有多条数据时,只有最后一条的NIM和房间号能被校验到,前面的都被覆盖掉了,自然就失效了。

解决方案思路

把单个的ruangan和nimMahasiswa变量换成集合(比如ArrayList<String>),用来存储所有已存在的NIM和房间号,这样在校验的时候就能检查输入值是否存在于整个集合中,而不是只和最后一条数据对比。

修改后的完整代码

import java.util.ArrayList;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class KelasActivity extends AppCompatActivity {
    EditText nim, ruang;
    String nim2, ruang2;
    // 把单个变量改成集合,存储所有已有的NIM和房间号
    ArrayList<String> existingNims = new ArrayList<>();
    ArrayList<String> existingRooms = new ArrayList<>();
    ProgressDialog pDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kelas);
        nim = (EditText) findViewById(R.id.editNim);
        ruang = (EditText) findViewById(R.id.ruangPinjam);
        new daftarMahasiswa().execute();
    }

    public void nextButton(View view) {
        nim2 = nim.getText().toString().trim();
        ruang2 = ruang.getText().toString().trim();

        // 校验房间号是否已存在
        if (existingRooms.contains(ruang2)) {
            Toast.makeText(KelasActivity.this, "This room has already been borrowed", Toast.LENGTH_LONG).show();
            ruang.setError("You cannot borrow the room again");
        }
        // 校验NIM是否已存在
        else if (existingNims.contains(nim2)) {
            Toast.makeText(KelasActivity.this, "This NIM has already borrowed a room", Toast.LENGTH_LONG).show();
            nim.setError("You cannot borrow again");
        } else {
            // 这里写添加新数据的逻辑
            Toast.makeText(KelasActivity.this, "Validation passed, can add data", Toast.LENGTH_SHORT).show();
        }
    }

    class daftarMahasiswa extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(KelasActivity.this);
            pDialog.setMessage("Loading...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
            // 每次加载数据前清空集合,避免重复数据
            existingNims.clear();
            existingRooms.clear();
        }

        @Override
        protected String doInBackground(String... params) {
            String link_url = "http://192.168.43.54/datapeminjamankelas/read_mahasiswa.php";
            JSONParser jParser = new JSONParser();
            JSONObject json = null;
            try {
                json = jParser.AmbilJson(link_url);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            try {
                if (json != null) {
                    JSONArray str_json = json.getJSONArray("data");
                    for (int i = 0; i < str_json.length(); i++) {
                        JSONObject ar = str_json.getJSONObject(i);
                        // 把每条数据的NIM和房间号添加到集合中
                        existingNims.add(ar.getString("nim").trim());
                        existingRooms.add(ar.getString("ruang").trim());
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            pDialog.dismiss();
        }
    }
}

关键修改点说明

  1. 集合替换单个变量:用ArrayList<String>存储所有已存在的NIM和房间号,避免被循环覆盖。
  2. 循环添加数据到集合:在遍历JSON数组时,把每个元素的nim和ruang添加到对应的集合中,而不是覆盖单个变量。
  3. 校验逻辑修改:使用集合的contains()方法检查输入值是否存在于已有的数据中,这样就能覆盖所有数据的校验了。
  4. 清空集合:在onPreExecute()里清空集合,避免每次重新加载数据时出现重复数据。

这样修改后,不管数据库里有多少条数据,都能准确校验NIM和房间号是否重复啦!

内容的提问来源于stack exchange,提问作者Mo Ne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:22:46