2012-12-19 4 views
5

Mein Android-Client bekommt Server JSON-Antwort analysiert werden, wie folgt:Art meiner ojekte, die von JSON-Daten

{"students":[{"id":1,"name":"John","age":12}, 
      {"id":2,"name":"Thmas","age":13} 
      {"id":3,"name":"Merit","age":10} 
      ...]} 

Mein Android-Client-Code die JSON Antwort auf Java-Objekt analysiert durch gson verwenden.

Meine entsprechenden Java-Klassen:

public class StudentList{ 
    private List<Student> students; 

    public List<Student> getStudents(){ 
    return students; 
    } 
} 

public class Student{ 
    private long id; 
    private String name; 
    private int age; 

    public long getId() { 
    return id; 
    } 
    public String getName(){ 
    return name; 
    } 
    public int getAge(){ 
    return age; 
    } 

} 

Alles funktioniert in diesem Punkt für mich in Ordnung, kann ich erfolgreich JSON-Daten in meine Java-Objekte analysieren, wie folgt vor:

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class) 

Dann würde ich mag ein Bit ändern, um die students (aus json Daten) in einer alphabetischen Reihenfolge zu erhalten, sortiert nach Student name. Ich habe folgende Art und Weise versucht: (ich die Student Klasse geändert, um die Comparable<> Schnittstelle zu implementieren):

public class Student implements Comparable<Student>{ 
    private long id; 
    private String name; 
    private int age; 

    public long getId() { 
    return id; 
    } 
    public String getName(){ 
    return name; 
    } 
    public int getAge(){ 
    return age; 
    } 

    // Override compareTo(), sort by 'name' 
    @Override 
    public int compareTo(Student obj) { 
    return this.getName().compareToIgnoreCase(obj.Name());  
    } 
} 

Mit Student Klasse oben verändert, habe ich versucht, die JSON-Daten erneut zu analysieren:

//'jsonData' is the server responsed json data 
StudentList students = gson.fromJson(jsonData, StudentList.class) 

Aber die Ergebnis students sind immer noch die gleichen wie vor dem Sortieren. Meine Sortierlösung funktioniert überhaupt nicht. Warum? Wo liege ich falsch ??

+1

Gibt es einen Grund, nicht nur zu verwenden, [ 'Collections.sort()'] (http://docs.oracle.com/javase/6/ docs/api/java/util/Sammlungen.html # sort% 28java.util.List% 29)? – amit

+0

Ich bin nicht vertraut mit Java. Aber ich glaube nicht, dass Sie die Liste sortiert haben. Versuchen Sie, die Collections.sort (Studenten) aufzurufen? – Evan

+0

Sie müssen sie tatsächlich vergleichen ... – njzk2

Antwort

2

gson wird nicht sortieren Elemente in der Liste, es wird immer noch nur die Elemente hinzufügen. Sie können die Liste sortieren, nachdem es Collections.sort Methode erstellt wird unter Verwendung von:

java.util.Collections.sort(students); 
5

Durch die einfache Implementierung von Comparable wird Ihre Klasse nicht sortiert. Sie müssen tatsächlich tun etwas, um es zu sortieren.

+0

Danke, könnten Sie bitte genauer? – john123

+0

Wie einige andere Antworten gezeigt haben, wäre Collections.sort() ein guter Ansatz. –

1

Nur weil Ihre Klasse Comparable ist macht nicht jede Sammlung automatisch sortieren. Sie müssen eine bestimmte Sammlung zu sortieren mit dem natürlichen orderering, indem Sie so etwas wie Collections.sort(students);