java - 如何将 JSONArray 放入 Android ListView 中

标签 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,它包含什么)

最佳答案

刚刚实现了一个 JSONArrayAdapter 将 JSON 数据获取到 ListView 中。它延伸 android.widget.SimpleAdapter 并且工作方式很像它的父类。

它只有一个静态方法来转换 JSONArrayList<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/

相关文章:

android - 如何在android中通过谷歌地图接收导航通知

服务器上的 JSON 解析与解析客户端

c++ - QJsonDocument::toJson() 生成超大文本。有办法解决吗?

javascript - getJSON 和 mod 重写

java - 将多个 WAR 重新打包到一个 EAR 中

java - 如何在不依赖数据库的 webapp 部署之间保存服务器状态?

java - 从 Java 执行但不是从命令行执行时出现 NoSuchFieldError

java - Android:在Java/Kotlin中的ScrollView内部居中LinearLayout

android - 带有两个 fragment 的 onContextItemSelected 的问题

android - Firebase IOS UTM 安装跟踪