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電話のメモリが制限されており、データを表示するためにアプリケーションに時間がかかる可能性があるため、サーバー側でデータを並べ替えようとしますが、サーバー側でのメモリ制限の問題はありません。

于 2012-08-13T09:48:11.693 に答える
0

ここで説明されているように、コンパレータを使用して配列リストをソートします。次に、ArrayAdapter を使用して Listview にアイテムを表示します。

于 2012-08-13T09:43:57.047 に答える