【发布时间】:2018-06-16 10:50:24
【问题描述】:
我正在制作一个应用来显示电影列表,如屏幕截图所示。
问题是,当我选择选项菜单 top_rated 选项时,它会重新加载正确的数据,但返回到 onLoadFinished 的列表包含之前的数据和之后的新数据。
我该如何解决这个问题,因为 我只希望新数据出现在列表中。我试过 onLoaderReset 但它没有被调用,因为活动没有被破坏,我无法找到任何其他方式来取消引用旧数据,或者换句话说 首先清空旧的已经获取的列表然后用新获取的列表替换它。
如何实现上述..?
还有一件事,每当我去任何其他活动然后返回时,显示的数据都是重复的。我知道这可能是一个生命周期问题,可以通过一些研究来解决,但只有在第一个问题得到解决后我才能这样做。
这是应用程序的屏幕截图:- 更新 --> 实际问题不在 MainActivity.java 中,而是在下面的文件中,因此问题现在已解决,如我的回答中所述。
这是我在 MainActivity.java 中调用的 JSONUtils.java 函数:-
import com.example.trishantsharma.popularmovies.Movie;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class JSONUtils {
private static ArrayList<String[]> movieTitleAndPosterList = new ArrayList<>();
//ALL CONSTANTS HERE
public static ArrayList<String[]> parseMovieJSON(String jsonReceived){
//THE PROBLEM IS HERE AND HAS BEEN RECTIFIED IN THE ANSWER
try {
JSONObject movieObject = new JSONObject(jsonReceived);
JSONArray allMoviesArray = movieObject.getJSONArray(RESULT_JSON_ARRAY_STRING);
for (int i = 0; i < 19; i++) {
JSONObject particularMovie = allMoviesArray.optJSONObject(i);
String movieId = Integer.toString(particularMovie.optInt(ID_JSON_OBJECT_STRING));
String moviePoster = particularMovie.optString(POSTER_JSON_OBJECT_STRING);
String[] singleMovieTitleAndPosterArray = {movieId,moviePoster};
movieTitleAndPosterList.add(singleMovieTitleAndPosterArray);
}
return movieTitleAndPosterList;
} catch (JSONException e){
e.printStackTrace();
}
return null;
}
}
谢谢。
【问题讨论】:
-
在 onFinished 中你清除了 movieTitleAndPosterPathFinalList 和 addAll 相同的列表。意味着您首先清空列表,然后在其中添加。
-
是的。我已经这样做了,但即使在那之后它也无济于事。实际上,movieTitleAndPosterPathList 是在我解释过的之后返回的。
-
显示你在父类中的 onLoadFinished。
-
父类 ??这是主要课程。我应该展示什么课程?
-
LoaderManager.LoaderCallbacks
标签: android android-lifecycle asynctaskloader