假装成熟的冯先生的博客

有些事情你现在不做,一辈子也不会再做了!

okhttp网络同步请求,线程同步执行

在做地图轨迹回访的时候有这样一个需求,根据时间段获取经纬度信息,然后把经纬度数据添加到数组,在地图上展示出来。接口查询的时候开始时间和结束时间是不予许超过24小时的,所以当选择完时间之后就需要截取时间段,多次执行请求接口,然后把请求到的数据添加到数组,这就需要执行的时候线程和网络请求同步,围绕这个问题我做了下面的操作,直接上代码

private synchronized void BottomWindow(final String num, final String strttime, final String endtime) {

        //补全请求地址
        String requestUrl = String.format("这里面写的就是请求接口url");
        //创建一个请求
        Request request = new Request.Builder().url(requestUrl).get().build();
        //创建一个Call
        Call call = okHttpClient.newCall(request);
        //执行请求
        try {
            Response response = call.execute();
            String string = response.body().string();
            final JSONObject jsonObject = new JSONObject(string);
            int status = jsonObject.getInt("status");
            if (status == 0) {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            JSONArray pointss = jsonObject.getJSONArray("points");
                            listt = JsonUtils.parseJsonArray(pointss);
                            for (int i = 0; i < listt.size(); i++) {
                                Map map = (Map) listt.get(i);
                                Log.e("map", "" + map);

                                final double latitude = Double.parseDouble(map.get("latitude").toString());
                                final double longitude = Double.parseDouble(map.get("longitude").toString());
                                final String address = map.get("address").toString();
                                final int loc_time = Integer.parseInt(map.get("loc_time").toString());

                                String timedat = timedate(String.valueOf(loc_time));

                                View inflate = View.inflate(MapActivity.this, R.layout.map_list, null);
                                TextView time = (TextView) inflate.findViewById(R.id.time);
                                TextView jingdu = (TextView) inflate.findViewById(R.id.jingdu);
                                TextView adress = (TextView) inflate.findViewById(R.id.adress);


                                time.setText("时间:" + timedat);
                                jingdu.setText("经度:" + latitude + "    纬度:" + longitude);
                                adress.setText("地址:" + address);

                                linear3.addView(inflate, i);

                                                    /*点击列表弹出sensor信息*/
                                inflate.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        ShowSensor(String.valueOf(loc_time), latitude, longitude, address);
                                    }
                                });
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
            Log.e("参数", strttime + "结束时间" + endtime);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

可以看到方法前面家里synchhronized关键字,就是为了让线程同步,关于synchhronized可以自行百度,网上有很多人有详细的讲解,我就不一一说明了,记得执行的时候别忘了在新建线程。

new Thread(new Runnable() {
                @Override
                public void run() {
                    BottomWindow(num, String.valueOf(startdate), String.valueOf(enddate));
                }
            }).start();

阅读更多
个人分类: OKhttp网络请求
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

okhttp网络同步请求,线程同步执行

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭