2012-08-13 39 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顯示在列表視圖中的項目