Java 如何将sqlite中的数组与json数组中的内容进行比较
您好,我对比较sqlite数据库中的数组和来自webservice响应的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
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)));