Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将sqlite中的数组与json数组中的内容进行比较_Java_Android_Arrays_Sqlite - Fatal编程技术网

Java 如何将sqlite中的数组与json数组中的内容进行比较

Java 如何将sqlite中的数组与json数组中的内容进行比较,java,android,arrays,sqlite,Java,Android,Arrays,Sqlite,您好,我对比较sqlite数据库中的数组和来自webservice响应的json数组的最佳策略存在问题。请告诉我比较这两个阵列的最佳方法。这是我的密码: public void getAllElements() { Map<String, String> map = new HashMap<String, String>(); try { //select all query db.open(); Cur

您好,我对比较sqlite数据库中的数组和来自webservice响应的json数组的最佳策略存在问题。请告诉我比较这两个阵列的最佳方法。这是我的密码:

public void getAllElements() {
     Map<String, String> map = new HashMap<String, String>();
     try {
        //select all query
        db.open();
        Cursor cc= db.getAllEntries();
        try {
            // looping through all rows and adding to list
            if (cc.moveToFirst()) {
                do {
                   map.put("ID",cc.getString(cc.getColumnIndex(DbHelper.ENTRY_ID)));
                } while (cc.moveToNext());
            }
        } finally {
            try { cc.close(); } catch (Exception ignore) {}
        }
    } finally {
         try { db.close(); } catch (Exception ignore) {}
    }
    // return  list 
}

protected String doInBackground(String... params) {
    // Creating service handler class instance

    JSONParser jParser = new JSONParser();
    DefaultHttpClient client = new DefaultHttpClient(); // Thread
    String uri = "url";

    HttpGet httpget = new HttpGet(uri);
    httpget.setHeader("Cookie", cookie);

    try {
        response = client.execute(httpget);
        // response
        String res = EntityUtils.toString(response.getEntity());

        // jarray with the json responde
        jArr = new JSONArray(res);
        System.out.println("response" + jArr);

        for (int i = 0; i < jArr.length(); i++) {
            // create json object
            JSONObject jsonObject = jArr.getJSONObject(i);
            // easy parse fields
            String vid = jsonObject.getString("vid");
            String nid = jsonObject.getString("nid");
            // uid value
            String field_text = jsonObject.getString("field_text");
            String field_edit_ts = jsonObject.getString("field_editts");
            String field_deleted_flag = jsonObject.getString("field_deleted");
            String field_device_name = jsonObject.getString("field_devicename");
            String field_creation_ts = jsonObject.getString("field_creationts");
            String field_device_key = jsonObject.getString("field_devicekey");
         }
    } catch(Exception e){
    }
}

您可以创建类来保存所获得的数据状态,并重写方法equals以便在类中进行比较

此外,要保存数据,请使用ArrayList。 用于比较下一个代码

Collection<YourObject> one= new ArrayList(Arrays.asList(obj1, obj2, obj3));
Collection<YourObject> two = new ArrayList(Arrays.asList(obj1, obj2, obj3));

one.equals(two)

我建议将数据库和JSON数据包装在一个类中,并实现EqualObject方法

对于JSON数据,一旦有了如上所述的类,我将使用GSON直接转换为对象

然后,为了进行比较,将数据库或JSON数据转换为一个来自集合的列表,或者转换为一个HashTable/HashMap,以便搜索和使用List方法上的Collections.containsObject和一个与列表大小进行比较的contains计数。下面是一个例子,请填空:

List<YourObject> dbDataList = new ArrayList<YourObject>(Arrays.asList(yourDatabaseDataArray));
int containsCount = 0;
for (YourObject o : yourJsonDataArray){
    if (dbDataList.contains(o))
        containsCount ++;
}
// Success condition is up to you, I'm just comparing the sizes
if (containsCount == dbDataList.size()){
    // Success!
} else {
    // Failure
}

您正在将字符串ID放入映射的每个值的键中。将其更改为列表,并使用Collections.sortlist对其进行排序。

您能提供一些示例吗?谢谢
Map<String, String> map = new HashMap<String, String>();
map.put("ID",cc.getString(cc.getColumnIndex(DbHelper.ENTRY_ID)));