我有一个适配器类,它扩展了GroupingCursorAdapter
和类型的构造函数
Adapter_Contacts(Context context, Cursor cursor, AsyncContactImageLoader asyncContactImageLoader)
。
我想使用同一个类来填充我的ListView
。我从一个JSON
的网络服务获取数据。
所以我的问题是,如何将JSONArray
转换为Cursor
以使用相同的适配器类?
答案 0 :(得分:8)
所以我的问题是,如何将JSONArray转换为Cursor来使用 相同的适配器类?
您可以将JSONArray
转换为MatrixCursor
:
// I'm assuming that the JSONArray will contain only JSONObjects with the same propertties
MatrixCursor mc = new MatrixCursor(new String[] {"columnName1", "columnName2", /* etc*/}); // properties from the JSONObjects
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jo = jsonArray.getJSONObject(i);
// extract the properties from the JSONObject and use it with the addRow() method below
mc.addRow(new Object[] {property1, property2, /* etc*/});
}
答案 1 :(得分:0)
PLease发现这个准备好的方法很有帮助:
public static MatrixCursor jsonToCursor(JsonArray jsonArray) {
MatrixCursor cursor;
JsonObject jsonObject;
int jsonObjectIndex;
ArrayList<String> keys = new ArrayList<>();
ArrayList<Object> cursorRow;
keys.add("_id"); // Cursor must have "_id" column.
// Cross-list all JSON-object field names:
for (
jsonObjectIndex = 0;
jsonObjectIndex < jsonArray.size();
jsonObjectIndex++) {
jsonObject =
jsonArray
.get(jsonObjectIndex)
.getAsJsonObject();
for (String key : jsonObject.keySet()) {
if (!keys.contains(key)) {
keys.add(key);
}
}
}
// Set CURSOR-object column names:
cursor =
new MatrixCursor(
(String[]) keys.toArray());
for (
jsonObjectIndex = 0;
jsonObjectIndex < jsonArray.size();
jsonObjectIndex++) {
jsonObject =
jsonArray
.get(jsonObjectIndex)
.getAsJsonObject();
// Create CURSOR-object row:
cursorRow = new ArrayList<>();
for (String key : keys) {
cursorRow.add(
jsonObject.get(
key));
}
cursor.addRow(
cursorRow);
}
return cursor;
}