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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)