2012-12-19 21 views
5

khách hàng Android của tôi nhận được phản hồi JSON máy chủ như sau:Sắp xếp ojects tôi được phân tích từ dữ liệu json

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

mã khách hàng Android của tôi phân tích các phản ứng JSON để đối tượng Java bằng cách sử dụng gson.

lớp Java tương ứng của tôi:

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

} 

Tất cả mọi thứ hoạt động tốt đối với tôi vào thời điểm này, tôi thành công có thể phân tích dữ liệu JSON để các đối tượng Java của tôi, như sau:

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

Sau đó, tôi sẽ muốn sửa đổi một chút để có được số students (từ json dữ liệu) theo thứ tự chữ cái , được sắp xếp theo của học sinh name. Tôi đã thử các cách sau: (Tôi đã thay đổi lớp Student để thực hiện các giao diện 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());  
    } 
} 

Với trên sửa đổi Student lớp, tôi đã cố gắng để phân tích các dữ liệu json một lần nữa:

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

Nhưng kết quả students vẫn giống như trước khi sắp xếp. Giải pháp phân loại của tôi không hoạt động chút nào. Tại sao ?? Tôi đang ở đâu vậy ??

+1

Có một lý do để không chỉ cần sử dụng [ 'Collections.sort()'] (http://docs.oracle.com/javase/6/ tài liệu/api/java/util/Collections.html # sort% 28java.util.List% 29)? – amit

+0

Tôi không quen với java. Nhưng tôi không nghĩ rằng bạn đã sắp xếp danh sách. Thử gọi Collections.sort (học sinh)? – Evan

+0

bạn cần thực sự so sánh chúng ... – njzk2

Trả lời

2

gson sẽ không sắp xếp các mục trong danh sách, nó sẽ vẫn chỉ thêm các mục. Bạn có thể sắp xếp danh sách sau khi nó được tạo ra bằng phương pháp Collections.sort:

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

Chỉ cần triển khai So sánh sẽ không làm cho lớp của bạn được sắp xếp; bạn phải thực sự làm thứ gì đó để sắp xếp.

+0

Cảm ơn, bạn có thể vui lòng cụ thể hơn không? – john123

+0

Như một vài câu trả lời khác đã cho thấy, Collections.sort() sẽ là một cách tiếp cận tốt. –

1

Chỉ vì lớp học của bạn là Comparable không làm cho mọi bộ sưu tập tự động sắp xếp. Bạn phải nói cho một bộ sưu tập cụ thể sắp xếp bằng cách sử dụng thứ tự tự nhiên, bằng cách sử dụng một số thứ như Collections.sort(students);

Các vấn đề liên quan