2

我使用 JSON 从服务器接收数据,我想用字母索引部分按字母顺序对它们进行排序,并将它们存储在 ListView 中。也许会发生的事情:

for(int i=0;i<jArray.length();i++){
// here
}

我读到您只能使用光标来订购这样的元素。在我的情况下,将来自服务器的元素存储在数据库中并再次读取它们是非常低效的。浪费时间和记忆。

所以,我问你是否有任何解决方案可以解决我的问题:按字母顺序排列,并使用从 JSON 接收的字母索引部分字符串。

编辑:我希望我的列表视图看起来像这样http://eshyu.wordpress.com/2010/08/15/cursoradapter-with-alphabet-indexed-section-headers/。我的意思是那些部分。我发现的所有教程都说您需要使用游标获取信息。我的问题是如果我不能在没有游标的情况下执行此操作,因为将它们存储在本地数据库中也会浪费内存。

4

2 回答 2

1

您可能需要解析 JSON 数组:

List<Project> list = new ArrayList<Project>();

for (int i = 0; i < jArray.length(); i++) {
    JSONObject obj = (JSONObject) jArray.get(i);
    project = new Project();
    project.setId( Long.parseLong(obj.get("id").toString()));
    project.setKey(obj.get("key").toString());
    project.setName(obj.get("name").toString());

    list.add(project);
}

您可以使用这样的比较器类对它们进行排序:

Collections.sort(list), new Comparator<Project>() {
    public int compare(Project p1, Project p2) {
        return p1.getKey().compareToIgnoreCase(p2.getKey());
    }
});

您还可以有Project类和implements可比较:

public class Project implements Comparable<Project> {
   private long id;
   private String key;
   private String name;

   public int compareTo(Project p) {
    if (this.key > p.key)
        return -1;
    else if (this.key < p.key)
        return 1;
    return 0;
   }
}

然后对列表进行排序Collections.sort(list);

My suggestion是尝试在Server端对数据进行排序,因为手机内存有限,可能会使您的应用程序耗时显示数据,但您在Server端没有内存限制问题。

于 2012-08-13T09:48:11.693 回答
0

使用比较器对数组列表进行排序,如此处所述。然后使用 ArrayAdapter 在 Listview 中显示项目

于 2012-08-13T09:43:57.047 回答