解析android中的大型JSON数据并对其进行过滤

时间:2018-03-20 01:53:26

标签: android json

上下文:我从后端请求大型JSON数据,其中包含VPS中不断更新的JSON。

我请求我的第一个JSON文件,其中包含我的电影发布日期和电影的ID;例如:

[
  {
   "id": 101,
   "release_date": "2018-03-23",
  }, {...}  
]

我请求的第二个JSON文件包含电影的一般信息,如名称和描述,例如;

[
  {
    "id": 101,
    "name": "PACIFIC RIM UPRISING",
    "description": "Here's a cool description",
    "genres:": [12, 11, 8]
  }, {...}  
]

请求的两个文件都保存在用户的手机中。

现在解析(这个问题的主题)。我首先解析ArrayList中的JSON版本(Release是一个包含电影ID和发布日期的对象),然后我在HashMap中解析电影信息JSON(整数是电影的ID,电影是包含名称的对象) ,然后是流派列表和描述)。

现在,当我想按类型过滤发布时(用户可以一次过滤多个类型的recyclerview / data)我使用此代码:

    Collections.sort(userGenres); // user chosen genres gotten from a shared pref
    ArrayList<Release> newReleases = new ArrayList<>(); // the list with only the movie the user wants by genre 
    for (Release release : mUpcomingReleases) {
        Movie movie = gameInfoHashMap.get(release.id); // gameInfoHashMap is the hashmap which contains our movie info (it has the genres list)
        ArrayList<Integer> releaseGenres = movie.genres; 
        Collections.sort(releaseGenres);
        if (!releaseGenres.equals(genres)) {
            // if they don't contain the same genres chosen by the user, get out
            break;
        } else {
            // add it to the list
            newReleases.add(release);
        }
    }

现在问题是它看起来并不高效。你需要了解我的mUpcomingReleases包含了一千个发布对象,是否有更好的方法来过滤类型?我的应用感觉很慢。或者有更好的方法来更改我的应用程序的解析,使其更轻量级?

1 个答案:

答案 0 :(得分:0)

我认为您需要做的是,您不应该立即下载所有数据。一次只解析50-60个对象。让你的后端只向你发送完整结果的一部分。它是获得所需数据的最佳实践,即仅获得用户一次可以看到的部分。当用户向下滚动recyclerview同时加载数据时。像IMDB和其他应用程序也这样做。

希望这有帮助