如何将JSONArray放入Android ListView

时间:2010-09-16 08:22:46

标签: java android json listview

我正在尝试在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,它包含什么)

2 个答案:

答案 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)。