我尝试在Asynctask
的自定义适配器中使用RecyclerView
,但持有人是空的。在getItemCount();
我第一次得到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();
}
}
}
logcat的
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
我在onPostExecute
中正确获取了长度值,但是
int getItemCount()
返回零。
请帮忙。
答案 0 :(得分:3)
您正在进行异步调用。您的异步任务位于与主线程并行运行的工作线程上。当你第一次返回长度时,你的任务就不会在那个时间之前获得计数。
答案 1 :(得分:2)
在getItemCount()
中,您启动对Web服务的异步调用。
在此调用完成之前,getItemCount()
已经返回0。
当AsyncTask完成执行时,您必须通知适配器您的数据已更改。拨打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();
}