执行网络操作是耗时操作,即便是在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();//这里改成Synchttpclientclient.addHeader("apikey", key);client.get(httpUrl, new AsyncHttpResponseHandler(){@Overridepublic 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();}}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {Toast.makeText(MyService.this, ""+statusCode, 0);
            }});}

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

(原创)在service中定时执行网络操作的几点说明相关推荐

  1. DevelopTraining(20)---执行网络操作

    官方链接:https://developer.android.com/training/basics/network-ops/index.html 这节课讲解了网络连接参与一些基础的任务,监测网络连接 ...

  2. linux定时python,linux 中定时执行python脚本

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

  3. [原创]-[UiPath] UiPath中关于日期的操作

    ​ 这篇文章主要分享关于在Uipath中,对日期的一些操作.主要使用的是 DateTime. 1. 初始化一个DateTime, 可以是年,月,日,时,分,秒. 数据类型是 DateTime ​ 初始 ...

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

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

  5. c语言中定时执行线程alarm,用多线程写一个alarm,

    已结贴√ 问题点数:20 回复次数:3 用多线程写一个alarm, #include #include #include #include "errors.h" #define D ...

  6. 在MVC框架上定时执行某种操作

    发布待后 转载于:https://www.cnblogs.com/fengduandeai/p/8603137.html

  7. windows中定时操作(SetTimer函数用法)

    最近需要在服务端定时执行某个操作,于是需要用到SetTimer函数.当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间 ...

  8. linux系统定时检查网络状态python脚本

    有时需要使用ping命令检查网络通断,如果需要检查的网络主机比较多,使用脚本自动检查就比较方便. vim test.py //创建一个.py文件 test.py代码: 1 #导入所需模块 2 impo ...

  9. Android官方开发文档Training系列课程中文版:网络操作之网络管理

    原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度 ...

最新文章

  1. 梦美生命获1亿元A轮融资,鼎晖领投
  2. 解决Wamp 开启vhost localhost 提示 403 Forbbiden 的问题!
  3. Android-完美解决在Activity中触摸返回键onBackPressed不能触发问题
  4. 软件介绍网站:“软矿”x-berry
  5. mysql添加新用户
  6. java游戏贪吃蛇_Java实现贪吃蛇游戏
  7. ajax中get请求url传参数
  8. 将PHP对象转换为关联数组
  9. 向程序发送命令失败_Word提示:“向程序发送命令时出现问题”重装软件也没用?...
  10. Android ListView下拉刷新点击加载更多
  11. HJ82 将真分数分解为埃及分数(需要知道求埃及数的数学方法)
  12. 猫和老鼠玩象棋,玩了M+N局,猫赢了M局 老鼠赢了N局 NM,而且在整个过程中,猫的得分从来没有超过过老鼠,问共有多少种可能的比赛得分过程
  13. shell编程100例(附PDF下载)
  14. C# 日期格式化的中的 正斜杠的问题
  15. C语言中的if选择语句
  16. 基于python网络爬虫的个性化音乐播放器
  17. 读书笔记-为何家会伤人
  18. 使用Ribbon的时候有个大坑 提示Request URI does not contain a valid hostname: http://XX_XX/
  19. 企业搭建考试培训系统有哪些优势?
  20. Github公有仓库

热门文章

  1. mysql索引背后的数据结构_MySQL索引背后的数据结构及算法原理
  2. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方法
  3. https证书相关概念
  4. html5首页图标怎么除掉,移动端H5页面端如何除去input输入框的默认样式
  5. matlab生成不重复的随机数_怎么生成不重复随机数——《超级处理器》应用
  6. Linux4版本,Linux 4.12发布,据传是历史最大版本之一
  7. STM32之PWM波
  8. ice通信原理_变频开关电源工作原理,开关电源自我检修
  9. java dataurl_FileReader生成图片dataurl的分析
  10. m-qam matlab,基于matlab的M_QAM通信系统仿真.doc