我写了一些代码,使用Gson库创建json数据的数组列表,这看起来像这样。在特定的json元素上对jsonobjects的arraylist排序
{
"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和建立制定者拿着标题,艺术家,流派等
TrackFileManager.class是串行器,所有的JsonObject.addProperty代码并返回一个jsonObject返回到MainActivity。
这个jsonObject然后被添加到一个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>
以及几乎所有其他类型的组合,除此之外的其他组合。
我明显做错了事,我很确定我几乎在那里。 任何人都可以帮助或至少指向正确的方向吗?
EDIT
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.
艺术家为红色,并说“不能解析符号” – zoonosis 2014-10-18 12:56:35
这对于以下对象?? { POJO类‘文件名’:‘somefile.mp3’ ‘艺术家’:“artist1 “ ‘称号’:‘TITLE1’ ‘流派’:‘摇滚’ } TrackFileManager ....如果是,那么这应该在你的清单,这是应该实现比较 – 2014-10-18 13:08:21
其GSON的ArrayList类?创建基于Tracks类的JsonObjects,所以POJO是Tracks,TrackFileManager是创建json的序列化程序。 – zoonosis 2014-10-18 13:12:05