2012-12-19 5 views
5

My Android cliente ottenere risposta JSON server come segue:ordinare le ogetti che vengono analizzati da dati JSON

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

Il mio codice cliente Android analizza la risposta JSON per oggetto Java utilizzando gson.

miei corrispondenti classi Java:

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; 
    } 

} 

Tutto funziona bene per me a questo punto, posso analizzare correttamente i dati JSON ai miei oggetti Java, come segue:

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

Poi, lo farei come modificare un bit per ottenere il students (dai dati json) in un ordine alfabetico , ordinato pername dello studente. Ho provato modo seguente: (Ho cambiato classe Student per implementare l'interfaccia Comparable<>):

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());  
    } 
} 

Con sopra modificato Student classe, ho cercato di analizzare i dati JSON ancora:

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

Ma la risultato students sono ancora gli stessi di prima dell'ordinamento. La mia soluzione di smistamento non funziona affatto. Perché ?? Dove mi sbaglio ??

+1

C'è un motivo per non usare solo su [ 'Collections.sort()'] (http://docs.oracle.com/javase/6/ docs/api/java/util/Collections.html # sorta% 28java.util.List% 29)? – amit

+0

Non ho familiarità con java. Ma non penso che hai risolto la lista. Prova a chiamare Collections.sort (studenti)? – Evan

+0

devi effettivamente confrontarli ... – njzk2

risposta

2

gson non ordinerà gli elementi nell'elenco, aggiungerà comunque solo gli elementi. È possibile ordinare la lista dopo che è stata creata usando Collections.sort metodo:

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

L'implementazione semplicemente comparabile non consente di classificare la classe; devi effettivamente fare do qualcosa per ordinarlo.

+0

Grazie, potresti essere più specifico? – john123

+0

Come hanno dimostrato altre risposte, Collections.sort() sarebbe un buon approccio. –

1

Solo perché la classe è Comparable, non tutte le raccolte vengono automaticamente ordinate automaticamente. Devi dire a una raccolta particolare di ordinare usando l'ordinamento naturale, usando qualcosa come Collections.sort(students);