【问题标题】:How to put a JSONArray into an Android ListView如何将 JSONArray 放入 Android ListView
【发布时间】:2010-09-16 08:22:46
【问题描述】:

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

【问题讨论】:

    标签: java android json listview


    【解决方案1】:

    刚刚实现了一个 JSONArrayAdapter 来获取 JSON 数据到 ListView 中。它扩展了android.widget.SimpleAdapter 并且工作起来很像它的父类。

    它只有一个静态方法,将JSONArray 转换为List&lt;Map&lt;String, String&gt;&gt;,用于初始化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

    【讨论】:

      【解决方案2】:

      ArrayAdapter&lt;String&gt; 与字符串一起使用。您不能将它用于 JSONArray。

      我认为您必须为列表实现自定义适配器。尝试扩展 ListAdapter 的子类之一或 google 以获取“自定义列表视图适配器”。

      JSONArray 可以包含任何对象组合(JSONObjects、其他 JSONArrays、字符串、布尔值、整数、长整型、双精度值、null 或 NULL)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 2020-01-23
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多