【发布时间】:2014-12-13 21:51:35
【问题描述】:
我编写了一些代码,使用 Gson 库创建一个 json 数据的数组列表,看起来像这样。
{
"filename": "somefile.mp3"
"artist": "artist1"
"title": "title1"
"genre": "rock"
}
{
"filename": "anotherfile.mp3"
"artist": "artist2"
"title": "title2"
"genre": "electro"
}
我试图弄清楚如何按艺术家元素对这个数组列表进行排序。目前它只是按照最初通过文件名创建的方式对其进行排序。阅读 stackoverflow 表明我应该尝试使用自定义比较器。我一直在看这个答案 (How to sort GSON Array based on a key?),但它对我不起作用。
我有一个名为 Tracks.class 的自定义类,其中所有的 getter 和 setter 都设置了标题、艺术家、流派等
TrackFileManager.class 是序列化程序,所有 JsonObject.addProperty 代码都在其中,并将 jsonObject 返回给 MainActivity。
这个 jsonObject 然后被添加到一个名为 values 的 ArrayList 中,如下面的 MainActivity。 (listOfFiles 是另一个数组列表,包含我的 mp3 的所有文件名)
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Track.class, new TrackFileManager());
gsonBuilder.setPrettyPrinting();
//diasableHtmlEscaping stops & turning into \u0026
final Gson gson = gsonBuilder.disableHtmlEscaping().create();
values = new ArrayList<String>();
for (String file : listOfFiles){
t = new Track(path,file);
values.add(gson.toJson(t));
}
Collections.sort(values, new MyJSONComparator());
我的另一个代码是下面的 MyJSONComparator.class
public class MyJSONComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
这不会产生错误,但它不会对其进行排序,我知道它不会,但它不会在 Android Studio 中提示错误的唯一方法。如果我将代码更改为implements Comparator<Track>,Collections.sort 会产生错误。除非我有比较器,否则我无法访问我想要排序的元素,例如s1.getArtist 等,除非那不是正确的方法?我也尝试过ArrayList<String> 以及几乎所有其他类型的组合,但有效的组合除外。
我显然做错了什么,我很确定我快到了。 任何人都可以帮助或至少为我指明正确的方向吗?
编辑
public class MyJSONComparator implements Comparator<Track> {
@Override
public int compare(Track s1, Track s2) {
return s1.artist.compareTo(s2.artist);
}
}
以上代码导致Collections.sort(values,new MyJSONComparator());出错。
Sort (List<String>, java.util.Comparator<? super java.lang.string> in Collections cannot be applied to ArrayList<String>, com.example.MyJSONComparator.
【问题讨论】:
标签: java android json arraylist gson