执行网络操作是耗时操作,即便是在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中定时执行网络操作的几点说明的更多相关文章

  1. 【应用服务 App Service】App Service中抓取网络日志

    问题描述 众所周知,Azure App Service是一种PaaS服务,也就是说,IaaS层面的所有内容都由平台维护,所以使用App Service的我们根本无法触碰到远行程序的虚拟机(VM), 所 ...

  2. 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错

    问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...

  3. 【Android Developers Training】 78. 序言:执行网络操作

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. java中定时执行任务

    现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. 代码如下: package comz.autoup ...

  5. C#定时执行一个操作

    一个客户端向服务器端socket发送报文,但是服务器端限制了发送频率,假如10秒内只能发送1次,这时客户端也要相应的做限制,初步的想法是在配置文件中保存上次最后发送的时间,当前发送时和这个上次最后时间 ...

  6. SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)

    项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息.Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor .TaskScheduler 接口. ...

  7. linux 中定时执行python脚本

    一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令(编辑rc. ...

  8. C# 中代码执行 ping 操作

    在代码中可以通过调用 System.Net.NetworkInformation 命名控件下的 Ping 类的 Send() 方法来实现,代码如下: var ping = new System.Net ...

  9. ASP.NET MVC4计划任务实现方法(定时执行某个功能)

    系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...

随机推荐

  1. php装饰器模式完成文章编辑

    <?php //文章父类 class BaseArt{ protected $content; protected $art; public function __construct($cont ...

  2. Jquery 实现密码框的显示与隐藏【转载自http://blog.csdn.net/fengzhishangsky/article/details/11809069】

    <html> <head>  <script type="text/JavaScript"  src="jQuery-1.5.1.min.j ...

  3. JavaWeb学习笔记——javabean

  4. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【七】——实现资源的分页

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 这篇文章我们将使用不同的方式实现手动分页(关于高端大气上档次的OData本文暂不涉及,但有可 ...

  5. Nginx报错403 forbidden (13: Permission denied)的解决办法

    由于开发需要,在本地环境中配置了LNMP环境,使用的是Centos 6.5 的yum安装,安装一切正常,但是由于默认网站文件夹比较奇葩,于是把网站文件用mv命令移动到了新的目录,并相应修改了配置文件, ...

  6. Brew Command Not Found

    安装了brew后,居然找不到brew命令.于是uninstall后再次install,居然还是Brew Command Not Found. 解决办法: http://stackoverflow.co ...

  7. 简单CSS布局留用

    1.导航栏固定显示代码,文字居中,z-index header{ position: fixed; top: 0px; left: 10%; width: 80%; height: 80px; bor ...

  8. Orchard源码分析(2):Orchard.Web.MvcApplication类(Global)

    概述 分析一个的ASP.NET项目源码,首先可以浏览其项目结构,大致一窥项目其全貌,了解项目之间的依赖关系.其次可以浏览Web.config和Global.asax文件,找到应用程序的入口点. 本 文 ...

  9. Elasticsearch-PHP 索引操作(转)

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

  10. eclipse将引用了第三方jar包的java项目打成jar包

    今天用java开发了一个项目,想要打成jar包,并在linux环境下运行.但是运行时引用的第三方jar包却显示classNotFind错误. 于是查了一下解决办法,在此贴出来,方便以后查阅. 用Ecl ...