Android 将JSONObject 转换为HashMap 并使用SimpleAdapter 在ListView 中显示

标签 android json listview

我尝试搜索将 JSONObject 转换为 HashMap 但大多数结果是针对 Java 而不是 Android。因此,如果您以前有这方面的经验,我希望有人可以分享。

listview_with_simpleAdapter_and_hashmap.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main4);
    String[] food_id= new String[]{"1", "2", "3"};
    String[] food_name = new String[]{"apple", "orange", "banana"};
    List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

    for (int i = 0; i < 3; i++) {
        HashMap<String, String> hm = new HashMap<String, String>();
        hm.put("ID", food_id[i]);
        hm.put("Name", food_name[i]);
        aList.add(hm);
    }

    String[] from = {"ID", "Name"};
    int[] to = {R.id.text_id, R.id.text_name};
    SimpleAdapter adapter = new SimpleAdapter(this, aList, R.layout.list_item, from, to);
    ListView listView = (ListView) findViewById(R.id.listView);
    listView.setAdapter(adapter);

}

这个文件工作正常,每行只显示 2 列;

enter image description here

json.java

TextView mTxtDisplay;
String url = "http://192.168.1.103/web_service/omg.php/";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTxtDisplay = (TextView) findViewById(R.id.tv);

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            mTxtDisplay.setText(response.toString());
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO Auto-generated method stub
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(jsObjRequest);

192.168.1.103/web_service/omg.php/

{
"32":"Western Food",
"35":"Japanese Food",
"37":"Italian Food"
}

JSON 也工作正常。格式与 ListView 数据 -> ID 和 Name 完全相同。

所以我的问题是如何将 omg.php 中的 JSONObject 转换为 listview_with_simpleAdapter_and_hashmap.java ?我只需要一个简单的例子。

最佳答案

你可以这样做:

ListView listView = (ListView) findViewById(R.id.listView);

// ...

@Override
public void onResponse(JSONObject response) {
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

    try {
        Iterator<String> iterator = response.keys();

        while (iterator.hasNext()) {
            String key = iterator.next();
            String value = response.getString(key);

            HashMap<String, String> map = new HashMap<>();
            map.put(KEY_ID, key);
            map.put(KEY_NAME, value);

            list.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(list.size() > 0) {
        String[] from = {KEY_ID, KEY_NAME};
        int[] to = {R.id.text_id, R.id.text_name};

        SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list,
            R.layout.list_item, from, to);

        listView.setAdapter(adapter);
    }
}

关于Android 将JSONObject 转换为HashMap 并使用SimpleAdapter 在ListView 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39424112/

相关文章:

Android 自定义列表对话框

java - 安卓全屏摄像头

java - JSON 序列化时 jsonrpc4j null

java - Android - 来自 ArrayAdapter 的 fragment

android - 搜索 ListView 标志的功能 - 无法解析方法“getFilter()”

android - 单元测试中的 Sugar orm 产生了空指针异常

java - admob 广告、android-studio 编译器出错

php - 预期的内容类型 text/json 得到 text/html

xml - 从 JSON 字符串中读取数组元素的 XPath

android - ListView 图像的 onClick 监听器 - Android