bgk6668 2016-11-08 02:41 采纳率: 33.3%
浏览 1402

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条回答 默认 最新

  • glustful 2016-11-08 02:45
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法