我试图在自定义适配器中使用Asynctask
,但保持架是空的。第一次我得了0分,我不明白我错过了什么。请帮忙。
@Override
public int getItemCount() {
new initTimeline().execute();
Log.e("ICLength", String.valueOf(Length));
return Length;
}
private class initTimeline extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(context);
pDialog.setMessage("Loading...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
try {
// Execute HTTP Post Request
..............
}return jsonObject1;
}
@Override
protected void onPostExecute(JSONObject json) {
Log.e("AfterPE", String.valueOf(json));
Length = json.length();
Log.e("AfterPELen", String.valueOf(Length));
pDialog.dismiss();
}
}
}
洛卡特
02-10 02:33:17.867 4002-4002/com.example.mir E/ICLength: 0
02-10 02:33:19.057 4002-4002/com.example.mir E/AfterPE: {"id":"22","project_id":"2","date":"2015-11-30","description":"in progress"}
02-10 02:33:19.057 4002-4002/com.example.mir E/AfterPELen: 6
我在
RecyclerView
中得到了正确的长度值,但是getItemCount();
返回零。请帮忙。
最佳答案
在getItemCount()
中,启动对web服务的异步调用。
在此调用完成之前,getItemCount()
已返回0。
当异步任务完成执行时,您必须通知适配器您的数据已更改。打电话给notifyDatasetChanged
应该可以帮你:
@Override
protected void onPostExecute(JSONObject json) {
Log.e("AfterPE", String.valueOf(json));
Length = json.length();
Log.e("AfterPELen", String.valueOf(Length));
pDialog.dismiss();
notifyDatasetChanged();
}