2012-08-13 98 views
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/。我是指那些部分。我发现的所有教程都说你需要用游标获取信息。我的问题是,如果我不能使用游标来做这件事,因为将它们存储在本地数据库中也会浪费内存。

+0

嗨,我相信最好的办法是从服务器本身获取排序的数据。与手持设备相比,服务器具有更高的计算能力。这将加快您的过程,并且还可以节省您使用游标的时间。 – mudit 2012-08-13 09:40:49

+0

此链接可能会给你一些想法..http://stackoverflow.com/questions/7051785/when-jsonobject-keys-are-iterate-it-is-not-in-the-same-order-as-in-回应 - 来自 – 2012-08-13 09:53:32

+0

是的,我知道如何订购。我不知道的是如何实现索引部分。这是使滚动弹出您的部分的第一个字母的东西。 – 2012-08-13 10:03:19

回答

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列表中尝试在服务器端对数据进行排序,因为手机的内存是有限的,它可以使你的应用程序耗时显示数据,但你在服务器端没有内存限制问题。

+1

我可以对服务器中的数据进行排序,但我想实现按字母顺序排列的索引部分。当我滚动弹出第一个字母时。这是我的问题。 – 2012-08-13 09:59:32

+0

好的,您是否按照我的建议在客户端对它们进行了排序? – Ali 2012-08-13 10:03:57

+0

还没有,我收到从服务器排序的信息,所以我也不需要在这里排序。 – 2012-08-13 10:05:47

0

使用比较器按here所述对排列列表进行排序。然后使用一个ArrayAdapter显示在列表视图中的项目