【发布时间】:2016-11-23 18:19:44
【问题描述】:
在主要活动中,我调用一个 API 来下载最流行的电影。下载电影时,我调用adatper .notifyDataSetChanged();
这个调用是在 onPostExecute()of Asyntask 中进行的,但是 recycler 上没有任何变化。
主要部分:
mMovieList = new ArrayList<>();
mMovieAdapterRecyclerView = new MovieAdapterRecyclerView(this, mMovieList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mMovieAdapterRecyclerView);
receiveMovies();
这是我调用来加载电影并通知适配器的方法。
private void receiveMovies() {
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... voids) {
try {
JSONObject response = null;
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
String mUrl = ConnectionUtils.TRAKT_URL + ConnectionUtils.POPULAR + ConnectionUtils.ALL_INFO;
Request request = new Request.Builder()
.url(mUrl)
.addHeader(ConnectionUtils.TRAKT_API_VERSION, ConnectionUtils.TRAKT_API_VERSION_NUM)
.addHeader(ConnectionUtils.TRAKT_API_KEY, ConnectionUtils.API_KEY)
.addHeader(ConnectionUtils.TRAKT_CONTENT, JSON.toString())
.get()
.build();
Response clientResponse = client.newCall(request).execute();
int code = clientResponse.code();
String responseJson = clientResponse.body().string();
Gson gson = new Gson();
Type listType = new TypeToken<List<Movie>>() {
}.getType();
mMovieList = gson.fromJson(responseJson, listType);
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
if(aBoolean) {
mMovieAdapterRecyclerView.notifyDataSetChanged();
}
}
}.execute();
}
对API的请求是正确的,我得到了信息,因为当我调试时,我可以看到它。
如何让它刷新?
更新
【问题讨论】:
-
使用 OkHttp 时不需要 AsyncTask...stackoverflow.com/questions/34967505/…
-
请学习java的基础...给变量赋值...。
-
而不是
mMovieList = gson.fromJson(responseJson, listType);你能试试mMovieList.addAll(gson.fromJson(responseJson, listType)) -
见这里。注意说不要的注释。 github.com/codepath/android_guides/wiki/…
-
再次感谢@cricket_007 我解决了将gson给出的对象添加到mMovieList
标签: android android-asynctask android-adapter android-recyclerview