上下文:我从后端请求大型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包含了一千个发布对象,是否有更好的方法来过滤类型?我的应用感觉很慢。或者有更好的方法来更改我的应用程序的解析,使其更轻量级?
答案 0 :(得分:0)
我认为您需要做的是,您不应该立即下载所有数据。一次只解析50-60个对象。让你的后端只向你发送完整结果的一部分。它是获得所需数据的最佳实践,即仅获得用户一次可以看到的部分。当用户向下滚动recyclerview同时加载数据时。像IMDB和其他应用程序也这样做。
希望这有帮助