在执行asyncTask

时间:2016-02-10 08:06:28

标签: android android-asynctask android-recyclerview

我尝试在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()返回零。 请帮忙。

2 个答案:

答案 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();
    }