asynctask 从服务器获取JSON数据并解析 Android doInBackground没执行完就执行onPostExecute
 class mAsyncTask extends AsyncTask<String, String, List<UnbindOlder>>
    {
        @Override
        protected List<UnbindOlder> doInBackground(String... params) {
            Log.i("doInBackground","0000000000000000000");
            if(userid!=null) {
                String url =  "http://192.168.1.200:8080/onecard/app/older/getNoBindOlderByUser";
                OkHttpUtils.post(url)//
                        .url(url)//
                        .params("userId", userid)//
                        .execute(new StringCallback() {
                            @Override
                            public void onSuccess(String s, Call call, Response response) {
                                JsonData jsonData = judgeJsonDataFormat(s);
                                int state = jsonData.getState();
                                String json = new Gson().toJson(jsonData.getResult());
                                if (json != null && !TextUtils.isEmpty(json.toString())) {
                                    try {

                                        unbindOlderList = new Gson().fromJson(json, new TypeToken<ArrayList<UnbindOlder>>() {}.getType());
                                        Log.i("parseDataByGson",unbindOlderList.get(1).getIdCode());
                                    } catch (Exception e) {
                                        Log.e("1234", e.toString());
                                    }
                                }
                            }

                        });
                }
            return unbindOlderList;
        }

        @Override
        protected void onPostExecute(final List<UnbindOlder> unbindOlderList) {
            super.onPostExecute(unbindOlderList);
            Log.i("onPostExecute","0000000000000000000");
            if(unbindOlderList.size()>0){Log.i("onPostExecute","unbindOlderList.size()>0");}
            mAddolderAdapter = new AddolderAdapter(my,userid,unbindOlderList);
            mListView.setAdapter(mAddolderAdapter);
        }

    }

doInBackground里解析数据还没解析完就执行了onPostExecute
先打印了Log.i("doInBackground","0000000000000000000");
然后打印了 Log.i("onPostExecute","0000000000000000000");
最后打印Log.i("parseDataByGson",unbindOlderList.get(1).getIdCode());

怎么解决解析数据延迟的问题,适配器需要加载解析后的数据

2个回答

很正常吗,doinbackground就是在后台线程里执行,okhttputils也会自动开户一个线程来执行网络操作,两个线程并行的,postexecute先打印很正常,你直接使用okhttp不就行了

bgk6668
bgk6668 获取并解析数据总是延迟怎么解决呢
大约 3 年之前 回复

你既然已经用了异步任务了,为什么还要使用OkHttp,直接用OkHttp或者直接用异步任务就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问