列表视图的JSONArray排序 - android

时间:2014-09-24 13:49:59

标签: android json listview

“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上实现吗?

1 个答案:

答案 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));

让我知道这是否有效,无法检查,因为与我的儿子共度时光;)