0

我正在从json文件中获取信息并在自定义中显示数据ListView。现在,我有一个Array名为authors. 作者是多个。但是,在ListView我只能看到最后一个作者姓名或最后一个数组项。如何显示所有项目?这是我的代码

            for (int index = 0; index < jsonArray.length(); index++) 
            {
                HashMap<String, String> temp = new HashMap<String,String>();

                JSONObject jsonObject = jsonArray.getJSONObject(index);

                String topic = jsonObject.getString("topic");

                String type = jsonObject.getString("type");

                String title = jsonObject.getString("title");

                String absData = jsonObject.getString("abstract");


               JSONArray getAuthorsArray = new JSONArray(jsonObject.getString("authors"));

                for(int a =0 ; a < getAuthorsArray.length(); a++){
                    JSONObject getJSonObj = (JSONObject)getAuthorsArray.get(a);
                    String authordName = getJSonObj.getString("name");
                    Log.e("Name", authordName);
                    temp.put(KEY_AUTHOR, authordName);
                }


                temp.put(KEY_TOPIC, topic);
                temp.put(KEY_TYPE, type);
                temp.put(KEY_TITLE, title);
                temp.put(KEY_ABSTRACT,absData);



                list.add(temp);

            }
            }
            simpleAdapter = new SimpleAdapter(this, list, R.layout.abstract_items, from, new int[]{R.id.abTopic,R.id.abType,R.id.abTitle,R.id.SubTitle});
            setListAdapter(simpleAdapter);
4

2 回答 2

2
 temp.put(KEY_AUTHOR, authordName);

这大概就是为什么。您正在遍历所有作者,但HashMap将覆盖值并且只保存最后一个。

据我了解,您正在返回一个带有 JSONObject 数组的 JSON 响应。每个 JSONObject 包含一些信息和相关作者的子 JSONArray。

最简单的方法可能只是构建ArrayList<JSONObject>和扩展BaseAdapter实现您自己的适配器。这很容易。对于 ViewHolder 模式上的大量数据搜索,以进行优化。

于 2013-07-13T16:15:58.257 回答
0
        'HashMap<String, String> temp;
  for (int index = 0; index < jsonArray.length(); index++) 
        {
            temp = new HashMap<String,String>();

            JSONObject jsonObject = jsonArray.getJSONObject(index);

            String topic = jsonObject.getString("topic");

            String type = jsonObject.getString("type");

            String title = jsonObject.getString("title");

            String absData = jsonObject.getString("abstract");


           JSONArray getAuthorsArray = new JSONArray(jsonObject.getString("authors"));

            for(int a =0 ; a < getAuthorsArray.length(); a++){
                JSONObject getJSonObj = (JSONObject)getAuthorsArray.get(a);
                String authordName = getJSonObj.getString("name");
                Log.e("Name", authordName);
                temp.put(KEY_AUTHOR, authordName);
            }


            temp.put(KEY_TOPIC, topic);
            temp.put(KEY_TYPE, type);
            temp.put(KEY_TITLE, title);
            temp.put(KEY_ABSTRACT,absData);



            list.add(temp);

        }
        }
        simpleAdapter = new SimpleAdapter(this, list, R.layout.abstract_items, from, new int[]{R.id.abTopic,R.id.abType,R.id.abTitle,R.id.SubTitle});
        setListAdapter(simpleAdapter);'

您在 onstart 值上方声明“HashMap”行。它将对您有所帮助。

于 2016-09-08T11:39:31.457 回答