我正在尝试在Android应用中填充ListView。我有一个JsonArray中的数据,但它不能直接使用JsonArray。任何建议如何填充ListView?
JSONObject json = null;
try {
json = new JSONObject(client.getResponse());
JSONArray nameArray = json.names();
JSONArray valArray = json.toJSONArray(nameArray);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, valArray));
我正在尝试“valArray”,但它不起作用。 另外我想知道valarray包含什么? (JsonArray,它包含什么)
答案 0 :(得分:3)
刚刚实现了JSONArrayAdapter以将JSON数据导入ListView。它扩展android.widget.SimpleAdapter
并且与其父类非常相似。
它只有一个静态方法可将JSONArray
转换为List<Map<String, String>>
,用于初始化SimpleAdapter
。
import ...
public class JSONArrayAdapter extends SimpleAdapter {
public JSONArrayAdapter(Context context, JSONArray jsonArray,
int resource, String[] from, int[] to) {
super(context, getListFromJsonArray(jsonArray), resource, from, to);
}
// method converts JSONArray to List of Maps
protected static List<Map<String, String>> getListFromJsonArray(JSONArray jsonArray) {
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map;
// fill the list
for (int i = 0; i < jsonArray.length(); i++) {
map = new HashMap<String, String>();
try {
JSONObject jo = (JSONObject) jsonArray.get(i);
// fill map
Iterator iter = jo.keys();
while(iter.hasNext()) {
String currentKey = (String) iter.next();
map.put(currentKey, jo.getString(currentKey));
}
// add map to list
list.add(map);
} catch (JSONException e) {
Log.e("JSON", e.getLocalizedMessage());
}
}
return list;
}
}
只需使用与SimpleCursorAdapter等内置Android适配器相同的方式,并将字符串(json数据的键)映射到整数(列表视图行的视图)。
有关更多信息,请参阅documentation of SimpleAdapter。
答案 1 :(得分:2)
ArrayAdapter<String>
适用于Strings。你不能将它用于JSONArray。
我认为您必须为列表实现自定义适配器。尝试扩展ListAdapter的子类之一或谷歌“自定义列表视图适配器”。
JSONArray可能包含任何对象混合(JSONObjects,其他JSONArrays,字符串,布尔值,整数,长整数,双精度,空值或NULL)。