(原创)在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文件,在 ...
随机推荐
- 兼容ie6及一下版本的自适应
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" /> <meta ...
- MySQL外键使用需要注意的几点
最近刚刚接触MySQL,在建立表示遇到了一些问题,总是提示错误代码:150 can't create table ...,所以就到网上搜索了一下发现还有以下几点需要注意的: [CONSTRAINT [ ...
- webkit的一些不为人知的高级属性
1.-webkit-tap-highlight-color tap按钮或者链接时,就会出现一个半透明的灰色背景,设置属性: -webkit-tap-highlight-color:transpar ...
- Python基础之--常用模块
Python 模块 为了实现对程序特定功能的调用和存储,人们将代码封装起来,可以供其他程序调用,可以称之为模块. 如:os 是系统相关的模块:file是文件操作相关的模块:sys是访问python解释 ...
- Python之路【第十四篇】前端补充回顾
布局和事件 1.布局 首先看下下面的图片: 上面的内容都是居中的,怎么实现这个效果呢,第一种方法是通过float的方式,第二种是通过“div居中的方式” 第一种方式不在复述了,直接看第二种方式: 1. ...
- .NET安全审核检查表
书籍名称:Web安全设计之道 -.NET代码安全,界面漏洞防范与程序优化 .NET安全审核检查表 检查项 任务描述 设计环节 Security descisions should no ...
- JBoss7 安装配置
一.下载安装 1.下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本. 2.解压 jb ...
- [Json.net]忽略不需要的字段
摘要 在序列化对象,总会遇到一些敏感的信息,这些信息,并不想对调用接口的用户暴露出来,又或者移动端调用接口的时候,为了不返回没用的信息占用流量,这个时候也需要把一些信息给过滤掉. 系列文章 [Json ...
- jq实现点击弹出框代码
废话不多说,先贴代码吧 <script> function showBg() { //定义 showBg 函数 var bh = $("body").height(); ...
- python中raw_input() 与 input()
参考网址:http://www.cnblogs.com/way_testlife/archive/2011/03/29/1999283.html 在python中如何接收一个输入的字符串. 举个例子: ...