我正在尝试在 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,它包含什么)
最佳答案
刚刚实现了一个 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;
}
}
只需使用与内置 Android 适配器(如 SimpleCursorAdapter)相同的方式使用它,将字符串(json 数据的键)映射到整数(listview 行的 View )。
有关更多信息,请参阅 documentation of SimpleAdapter .
关于java - 如何将 JSONArray 放入 Android ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3724903/