“tipolistView.setAdapter(listViewArrayAdapter)是否可以通过键对JsonArray进行排序?
我的意思是,我有一个listview,它是以这种方式创建的:
{"id":"1","nome":"glamourhood","tipo":"1"},
{"id":"2","nome":"Face da Mia","tipo":"2"},
{"id":"5","nome":"Team Transformerz","tipo":"3"},
{"id":"6","nome":"Face da Team de novo","tipo":"4"},
{"id":"7","nome":"Tiago Faria Fitness","tipo":"5"},
{"id":"8","nome":"Nuno Soares","tipo":"6}
我希望它按“tipo”排序从小到大,甚至更好:按类型* id(这会很棒)。
这可以在Android上实现吗?
答案 0 :(得分:0)
将你的json反序列化为对象,比如 (假设这些是电影名称)
@Serializable
public class Movie {
private int id;
@SerializedName("nome")
private String name;
private int tipo;
public Movie();
//getter & setter
}
对于反序列化,您可以使用GSON。我在使用GSON时添加了一个将json字段映射到对象(nome和name)中不同字段的示例。
我现在无法提供反序列化的代码,但您会在网上找到大量资源。它必须像是:
final Movie movie = gson.fromJson(yourJsonInputReader, Movie.class);
将这些JSON反序列化为对象后,您可能拥有List<Movie> movies
。现在,您可以按照您想要的任何方式对此列表进行排序,为此目的使用CustomCoparator
。
public class MovieComparator implements Comparator<Movie>{
public enum Field {
ID, TIPO;
}
private Field field;
public MovieComparator(Field field) {
this.field = field;
}
@Override
public int compare(Movie mov1, Movie mov2) {
int comparison = 0;
switch(field) {
case ID:
comparison = mov1.getId().compareTo(mov2.getId());
case TIPO:
comparison = mov1.getTipo().compareTo(mov2.getTipo());
}
return comparison;
}
然后使用它:
Collections.sort(movies, new MovieComparator(MovieComparator.Field.ID));
让我知道这是否有效,无法检查,因为与我的儿子共度时光;)