博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原创)在service中定时执行网络操作的几点说明
阅读量:5981 次
发布时间:2019-06-20

本文共 2505 字,大约阅读时间需要 8 分钟。

执行网络操作是耗时操作,即便是在service中也要放到子线程中执行

这里我用到了async-http-client框架来执行异步请求操作

计时用的java原生Timer和TimerTask类

本来这两者分开操作各没有问题

但是如果把异步操作写到TimerTask的run方法里就会出错

E/AndroidRuntime(5799): java.lang.IllegalArgumentException: Synchronous ResponseHandler used in AsyncHttpClient. You should create your response handler in a looper thread or use SyncHttpClient instead.

解决办法之一就是把AsyncHttpClient换成SyncHttpClient.

下面是修改过的代码:

计时部分:

public void countTime(){                TimerTask task = new TimerTask() {            public void run() {                cityWeather(url, key, "深圳");            }        };        Timer timer = new Timer(true);//true:守护线程        timer.schedule(task, 1000, 10000); // 延时1000ms后执行,10000ms执行一次        // timer.cancel(); //退出计时器    }

请求网络部分:

public void cityWeather(String url,String key,String cityName){        String httpArg = "cityname="+cityName;        String httpUrl = url + "?" + httpArg;        SyncHttpClient client = new SyncHttpClient();//这里改成Synchttpclient        client.addHeader("apikey", key);        client.get(httpUrl, new AsyncHttpResponseHandler(){            @Override            public void onSuccess(int statusCode, Header[] headers,                    byte[] responseBody) {                 String responseString  = new String (responseBody);                    try {                        JSONObject jsonObject = new JSONObject(responseString);                        JSONObject retData = jsonObject.getJSONObject("retData");                                                String city = retData.getString("city");                        String weather = retData.getString("weather");                        String temp = retData.getString("temp");                        String l_tmp = retData.getString("l_tmp");                        String h_tmp = retData.getString("h_tmp");                        String WD = retData.getString("WD");                        String WS = retData.getString("WS");                        resultString = (city+","+weather+" ,气温:"+temp+"度\r\n"+                        "最高温度:"+h_tmp+" 最低温度:"+l_tmp+"\r\n"+"风向:"+WD+" , 风力:"+WS);                    } catch (JSONException e) {                        e.printStackTrace();                    }            }            @Override            public void onFailure(int statusCode, Header[] headers,                    byte[] responseBody, Throwable error) {                Toast.makeText(MyService.this, ""+statusCode, 0);            }});    }

转载于:https://www.cnblogs.com/BlogCommunicator/p/4887814.html

你可能感兴趣的文章
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
通过IP判断登录地址
查看>>
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
Beta冲刺——day6
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>