(原创)在service中定时执行网络操作的几点说明
执行网络操作是耗时操作,即便是在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);
}});
}
(原创)在service中定时执行网络操作的几点说明的更多相关文章
- 【应用服务 App Service】App Service中抓取网络日志
问题描述 众所周知,Azure App Service是一种PaaS服务,也就是说,IaaS层面的所有内容都由平台维护,所以使用App Service的我们根本无法触碰到远行程序的虚拟机(VM), 所 ...
- 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错
问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...
- 【Android Developers Training】 78. 序言:执行网络操作
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- java中定时执行任务
现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. 代码如下: package comz.autoup ...
- C#定时执行一个操作
一个客户端向服务器端socket发送报文,但是服务器端限制了发送频率,假如10秒内只能发送1次,这时客户端也要相应的做限制,初步的想法是在配置文件中保存上次最后发送的时间,当前发送时和这个上次最后时间 ...
- SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息.Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor .TaskScheduler 接口. ...
- linux 中定时执行python脚本
一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令(编辑rc. ...
- C# 中代码执行 ping 操作
在代码中可以通过调用 System.Net.NetworkInformation 命名控件下的 Ping 类的 Send() 方法来实现,代码如下: var ping = new System.Net ...
- ASP.NET MVC4计划任务实现方法(定时执行某个功能)
系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...
随机推荐
- php分页的实现
php常见分页有3种,一种是文字分页,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的,这个比较简单,前者稍微复杂些.最后一种是他们2者结合. 下面是代码: 1 //获取当 ...
- sql FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- Python之路【第十二篇续】jQuery案例详解
jQuery 1.jQuery和JS和HTML的关系 首先了HTML是实际展示在用户面前的用户可以直接体验到的,JS是操作HTML的他能改变HTML实际展示给用户的效果! 首先了解JS是一门语言,他是 ...
- C++基础入门
#include "iostream" using namespace std; class A{ public: A(int x1){ x = x1; } ...
- 自定义layout中需要重写的方法
Layout类中,有3个方法是必定会被依次调用: prepareLayout: 准备所有view的layoutAttribute信息 collectionViewContentSize: 计算cont ...
- 解决DWZ(JUI)的panel 点击关闭或者打开按钮 自己写的标签消失
问题描述:DWZ的panel面板比较常用,我们常常需要在其标题栏上再增加一个些按钮,如下图问题出来了,增加按钮后,点面板收缩按钮,增加的按钮就消失了而且面板收缩的click事件,也跟新增的按钮绑定了, ...
- 自定义列表dl的使用原因和场合
为什么要使用自定义列表? dl和ol, ul的区别? 要正确理解dl的意图, 理解 dl的 "语义" ! 才能知道为什么要使用dl, 以及在什么时候/ 什么情况下使用 dl? dl ...
- django学习<一>:安装
这两天打算摸索下和python相关的东西,然后正好小伙伴有个关于网站的任务,就怀着好奇的心态了解了下,然后就很自然地开始涉及django的问题. 首先就是django安装的问题,想不到第一步就出问题了 ...
- html5手机常见问题与工具分享
mobileTech A useful tools or tips list for mobile web application developing 这个项目收集移动端开发所需要的一些资源与小技巧 ...
- [原] Jenkins Android 自动打包配置
一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...