我试图在自定义适配器中使用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();
    }

10-08 16:29