数组列表与字符串比较,但重复记录插入到 sqlite 中

Array List compare with the String but the duplicate record is inserting in the sqlite

我正在尝试在 sqlite table 中插入记录,因为我正在执行这些步骤。

第 1 步 --> 我从 Sqlite table 获取值并将其存储在 Arraylist 中。

第 2 步 --> 现在从 Url

中获取记录

第 3 步 --> 现在我正在比较我获取 URL 的 ID 和我从 Sqlite 获取的 Arraylist。如果记录不存在,那么我调用插入查询。

问题 --> 当我得到单个记录时它工作正常但是当我的数组列表有三个不同的记录时它插入记录三次。

这是我用来填充来自 Sqlite 的数组列表的操作 table

      localstoragehandler = new LocalStorageHandler(getApplicationContext());
                    dbCursor=localstoragehandler.view_group("1");
                    if (dbCursor.getCount() > 0){
                        int noOfScorer = 0;
                        dbCursor.moveToFirst();
                        while ((!dbCursor.isAfterLast())&&noOfScorer<dbCursor.getCount())
                        {
                            noOfScorer++;
                            String id_sql = dbCursor.getString(0);
                            String grp_id = dbCursor.getString(1);
                            String grp_name = dbCursor.getString(2);
                            String grp_created_by = dbCursor.getString(3);
                            String grp_status = dbCursor.getString(4);
                            String grp_date=dbCursor.getString(5);
                            String grp_member=dbCursor.getString(6);
                            String grp_img=dbCursor.getString(7);
                            if (!compare_grp_list.contains(grp_id)) {

                                compare_grp_list.add(grp_id);
                                Log.e("grp_inside",grp_id+"---->add");

                            }
                            dbCursor.moveToNext();
                        }

                        Log.e("count grp", String.valueOf(dbCursor.getCount())+"---->count");


                    }
                    if (!compare_grp_list.contains("0")) {
                        compare_grp_list.add("0");
                    }

                    Log.e("Array list", String.valueOf(compare_grp_list));
                    abc_grp = socketOperator.grpHttpUpdate(finall_id);
                    FillGroup(abc_grp);

现在我正在使用下面的代码来解析我从 url 获取的数据,当我成功时,我正在尝试将记录插入到 Sqlite table 中。

public void FillGroup(String Content){


    Log.e("wait", "come");
    JSONObject jsonResponse;
    String result="";
    String grp_id="";
    String grp_name="";
    String grp_created_by="";
    String grp_status="";
    String grp_date="";
    String grp_member="";
    String grp_img="";
    String result_grp="";

    /////////user///////

    String id="";
    String user_name="";
    String user_phone="";
    String user_email="";
    String user_image="";
    String flag1="";
    String flag2="";

    int lengthJsonArr=0;

    try {
        jsonResponse = new JSONObject(Content);
  //            Log.e("jsonResponseGrp", String.valueOf(jsonResponse));
        JSONArray jsonMainNode = jsonResponse.optJSONArray("Android");

         lengthJsonArr = jsonMainNode.length();
  //            Log.e("lengthJsonArr", String.valueOf(lengthJsonArr)+"");
        for(int i=0; i < lengthJsonArr; i++)
        {

            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            grp_id = jsonChildNode.optString("grp_id").toString();
            grp_name=jsonChildNode.optString("grp_name").toString();
            grp_created_by= jsonChildNode.optString("grp_created_by").toString();
            grp_status     = jsonChildNode.optString("grp_status").toString();
            grp_date = jsonChildNode.optString("grp_date").toString();
            grp_member = jsonChildNode.optString("grp_member").toString();
            grp_img = jsonChildNode.optString("grp_member").toString();
            result_grp = jsonChildNode.optString("result").toString();
            Log.e("grp_id",grp_id);
            Log.e("grp_name",grp_name);
            Log.e("grp_created_by",grp_created_by);
            Log.e("grp_status",grp_status);
            Log.e("grp_date",grp_date);
            Log.e("grp_member",grp_member);
            Log.e("grp_img", grp_img);
            //TODO INSERT GROUP


            /////////////////////User//////////////////////

            id = jsonChildNode.optString("id").toString();
            user_name = jsonChildNode.optString("user_name").toString();
            user_phone = jsonChildNode.optString("user_phone").toString();
            user_email = jsonChildNode.optString("user_email").toString();
            user_image = jsonChildNode.optString("user_image").toString();
            flag1 = jsonChildNode.optString("flag1").toString();
            flag2 = jsonChildNode.optString("flag2").toString();


  //                localstoragehandler.insert_user(id,user_name,user_phone,user_email,user_image,flag1,flag2);


    //                Log.e("Data of Group",id+" - "+user_name+user_phone+user_email+user_image+flag1+flag2 );
        }
        if (result_grp.equalsIgnoreCase("Success")){

            for(int j=0;j<compare_grp_list.size();j++){
                Log.e("compare check",compare_grp_list.get(j)+"array");
                if (!compare_grp_list.contains(grp_id)){
                    Log.e("my checking",grp_id+"checking--->395");
                    Log.e("my compare checkin", compare_grp_list + "checking--->396");
                    localstoragehandler.insert_group(grp_id, grp_name, grp_created_by, grp_status, grp_date, grp_member, grp_img);
                    showNotificationGroup(grp_name);

                }


            }

        }


    } catch (JSONException e) {
        e.printStackTrace();

    }
}

这就是我在服务中所做的一切 class。

提前致谢。请帮助我。

您必须重写可比较的 equals 方法 class 以检查实例是否相等。

    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (obj == this) return true;
        if (!(obj instanceof YourClass )) return false;

        YourClass that = (YourClass) obj;

        if (this.grp_name == null) return (that.grp_name == null);
        if (this.grp_phone == null) return (that.grp_phone == null);
        ....
        return true;
    }

    public int hashCode() { // Always override hashCode AND equals
        return str.toLowerCase().hashCode();
    }

你的逻辑出现严重错误。

lengthJsonArr 可以 > 0 。但是您只在本地字段中存储最后一个值

String result="";
    String grp_id="";
    String grp_name="";
    String grp_created_by="";
    String grp_status="";
    String grp_date="";
    String grp_member="";
    String grp_img="";
    String result_grp="";

    /////////user///////

    String id="";
    String user_name="";
    String user_phone="";
    String user_email="";
    String user_image="";
    String flag1="";
    String flag2="";

因此,您只检查最后一个结果 (result_grp.equalsIgnoreCase("Success")){ 并将最后一个值 compare_grp_list.size() 次添加到数据库。

尝试将大括号移动到循环的末尾// Log.e("Data of Group",id+" - "+user_name+user_phone+user_email+user_image+标志1+标志2); } 如果 (result_grp.equalsIgnoreCase("Success")){

您使用了 contains 以便某些字符串部分匹配。以至于重复添加

equals( )equalsIgnoreCase( ) 方法

而不是

  if (!compare_grp_list.contains(grp_id)){
    }

参考

     String a = "ABCdefGHIjkl";
     String b = "ABCDEFGHIJKL";
     String c = "ABCd";
     String d = "abcd";

     if(a.contains(c))==true    
     if(a.equals(c))== false
     if(d.equalsIgnoreCase(c))==true