在ListView中设置JSON响应

时间:2013-03-29 15:43:11

标签: android json

if (status == 200) {
    String result = EntityUtils.toString(response.getEntity());
    Log.d("Response", result);
    ArrayAdapter < String > adapter = new ArrayAdapter < String > (getActivity(),
        android.R.layout.simple_list_item_1, result);
    setListAdapter(adapter);
}

我无法将回复设置到我的列表中。我得到了我的答复 { "Appointments": [{
"Name": "Kevin", }, { "Name": "John", }] }

如何在listView中设置我的名字参数。

2 个答案:

答案 0 :(得分:2)

  

如何在listView中设置我的名字参数。

一目了然。 ArrayAdapter的第三个参数应该是集合,但是您只传递简单的String。根据您的JSON我建议您:

  • 创建自己的对象,代表具有属性的(名称, 年龄等。)
  • 解析JSON并创建人员集合
  • 将集合设置为ListAdapter

实施例

public class Person {

    private String name;
    ...

    // getters and setters

    @Override
    public String toString() {
       return this.name;
    }
}

然后,您需要解析JSON并获取正确的数据:

List<Person> persons = new ArrayList<Person>();
Person person = null;
JSONObject root = new JSONObject(sourceString);
JSONArray appointments = root.getJSONArray("Appointments");
JSONObject child = null;
for (int i = 0; i < appointments.length(); i++) {
   child = appointments.getJSONObject(i);
   if (child != null)
      person = new Person();
      person.setName(child.getString("Name"));
      persons.add(person);
   }
}

然后初始化ListAdapter

new ArrayAdapter<String>(getActivity(), layout, persons);

现在你明白了。

注意:

我覆盖toString()方法的原因是,因为您使用内置Android布局的默认ArrayAdapter,List中的每个对象都将转换为String并将显示在ListView中,但如果我不知道t覆盖toString()它不会返回人的名字,而是返回人物不可读字符串的字符串表示。

答案 1 :(得分:1)

  1. result是一个包含整个响应的String。您需要将该字符串解析或拆分为您想要的项目。
  2. 您需要为适配器提供项目(作为列表或数组)。现在你已经创建了一个适配器,但没有通过构造函数或任何setter提供任何数据。
  3. 我建议您在Android开发者网站上阅读有关ListViews和Adapters的更多信息。