0
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 中设置我的名称参数。

4

2 回答 2

2

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

乍看上去。的第三个参数ArrayAdapter应该是集合,但您只传递简单的字符串。根据你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 中,但如果我不覆盖toString()它,它将不会返回人的名称,但对象的字符串表示是人类不可读的字符串。

于 2013-03-29T15:47:43.270 回答
1
  1. result是一个包含整个响应的字符串。您需要将该字符串解析或拆分为所需的项目。
  2. 您需要为您的适配器提供项目(作为列表或数组)。现在您已经创建了一个适配器,但没有通过构造函数或任何 setter 向它提供任何数据。

我建议你在 Android 开发者网站上阅读更多关于 ListViews 和 Adapters 的信息。

于 2013-03-29T15:46:39.077 回答