5

我的 Android 客户端获取服务器 JSON 响应如下:

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

我的 Android 客户端代码使用gson解析对 Java 对象的 JSON 响应。

我对应的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;
  }

}

此时对我来说一切正常,我可以成功地将 JSON 数据解析为我的 Java 对象,如下所示:

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

然后,我想修改一下以按字母顺序获取students(来自json数据),按学生的name. 我尝试了以下方式:(我更改了Student类以实现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());      
  } 
}

使用上述修改后Student的类,我尝试再次解析 json 数据:

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

但是结果students还是和排序前一样。我的排序解决方案根本不起作用。为什么??我哪里错了??

4

3 回答 3

5

简单地实现 Comparable 不会让你的类被排序;您必须实际一些事情来对其进行排序。

于 2012-12-19T15:03:17.397 回答
2

gson 不会对列表中的项目进行排序,它仍然只会添加项目。Collections.sort您可以在使用方法创建列表后对其进行排序:

java.util.Collections.sort(students);
于 2012-12-19T15:04:02.220 回答
1

仅仅因为您的课程Comparable不会使每个集合都自动排序。你必须告诉一个特定的集合使用自然排序,通过使用类似的东西Collections.sort(students);

于 2012-12-19T15:03:24.053 回答