一起来开发Android的天气软件(三)——使用Volley实现网络通信
距离上一篇一起来开发Android天气软件二的时间又将近半个月了,之间一直因为有事而没有更新实在抱歉,最近会加快更新的步伐,争取在2015年到来前写完这系列的博文,上一章我们已经使用LitePal框架搭建好了我们所需的数据库,这一章的内容将主要完成关于从中国天气网获取数据的网络通信操作,之前有学习过Android开发的同学应该都知道,Android实现互联网通信主要有两种方法,一种使用HTTPURLCONNECTION,一种使用HttpClient的方式,而我们今天将使用不同于以上两种的方式,使用Volley框架完成我们的网络通信服务。
Volley框架呢是 2013年在Google I/O大会上推出了一个新的网络通信框架。Volley非常的简单易用,在通信性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,也比较适合我们这款软件吧。
一、如何获取数据
二、如何实现网络通信
package com.melhc.util;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUtil {/** 从服务器端获取省县市的数据*/public static void sendHttpRequest(final String address,final HttpCallbackListener listener) {new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubHttpURLConnection connection = null;try {//创建一个url对象URL url = new URL(address);//通过url对象获取HTTPURLCONNCETION实例connection = (HttpURLConnection) url.openConnection();//设置http的请求所使用的方法为get方法connection.setRequestMethod("GET");//自由定制一些属性,比如设置连接超时,读取超时的毫秒数connection.setConnectTimeout(8000);connection.setReadTimeout(8000);//获得服务器返回的输入流InputStream in = connection.getInputStream();//将得到的输入流装换成String字符串BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8"));StringBuffer response = new StringBuffer();String line;while ((line = reader.readLine()) != null) {response.append(line);}LogUtil.i("HTTPUtil","------------------>" + response.toString());if (listener != null) {listener.onFinish(response.toString());}} catch (Exception e) {// TODO: handle exceptionif (listener != null) {listener.onError(e);}} finally {if (connection != null) {connection.disconnect();}}}}).start();}
}
package com.melhc.util;/** 网路连接的回掉接口*/
public interface HttpCallbackListener {void onFinish(String response);void onError(Exception e);
}
HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {@Overridepublic void onFinish(String response) {// TODO Auto-generated method stubboolean result = false;if ("province".equals(type)) {result = Utility.handleProvicesResponse(weatherDB, response);} else if ("city".equals(type)) {result = Utility.handleCitiesResponse(weatherDB, response,selectedProvince);} else if ("county".equals(type)) {result = Utility.handleCountiesResponse(weatherDB,response, selectedCity);}
三、Volley实现网络通信
接下来我们就开始正式使用Volley完成上面一摸一样的通信流程,只需要三步即可完成网络的发送与响应!首先还是得先下载一下Volley的jar文件,并且导入自己的程序中!volley.jar下载地址:http://download.csdn.net/detail/u013900875/8279223。接下来按以下三步走即可!
1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。
具体的代码实现如下所示
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());StringRequest stringRequest = new StringRequest(address,new Response.Listener<String>() {@Overridepublic void onResponse(String response) {LogUtil.i("TAG", "---------------->"+response);boolean result = false;if ("province".equals(type)) {result = Utility.handleProvicesResponse(weatherDB,response);} else if ("city".equals(type)) {result = Utility.handleCitiesResponse(weatherDB,response, selectedProvince);} else if ("county".equals(type)) {result = Utility.handleCountiesResponse(weatherDB,response, selectedCity);}if (result) {// 通过runonUiMainThread方法返回主线程处理逻辑runOnUiThread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubcloseProgressDialog();if ("province".equals(type)) {queryProvinces();} else if ("city".equals(type)) {queryCities();} else if ("county".equals(type)) {queryCounties();}}});}}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {LogUtil.i("TAG", "-------------------->" + error);runOnUiThread(new Runnable() {@Overridepublic void run() { // TODO Auto-generated method// stub //closeProgressDialog();Toast.makeText(getApplicationContext(),"加载数据失败!", Toast.LENGTH_SHORT).show();}});}});mQueue.add(stringRequest);
我们可以发现volley框架真的简单了很多,不需要我们去设置一些HTTP的通信属性以及一些回调方法,让我们只用去关心如何处理返回的数据即可,那么下面我们来逐条解析一下volley三步操作的每一步。
RequestQueue mQueue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(address, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } });
mQueue.add(stringRequest);
2014博客之星请支持一下啊!http://vote.blog.csdn.net/blogstar2014/details?username=u013900875#content
一起来开发Android的天气软件(三)——使用Volley实现网络通信相关推荐
- 一起来开发Android的天气软件(二)——使用LitePal搭建数据库
谢谢大家对该系列博文的支持与关注,我们现在趁热打铁正式开始我们的Android天气软件的开发吧!没有阅读过之前关于该软件的功能需求的同学可以先看一下一起来开发Android的天气软件(一),可以先去快 ...
- 一起来开发Android的天气软件(一)——功能规格介绍
从今天开始呢,打算来介绍如何开发一款Android的天气软件,其中运用到的基础知识点也比较多,比较适合初学或者刚接触Android开发不久的同学一起来学习交流和切磋! 那么我先对这个天气软件进行需求分 ...
- 一起来开发Android的天气软件(四)——使用Gson解析数据
离上一篇文章过去才4.5天,我们赶紧趁热打铁继续完成该系列的天气软件的开发.承接上一章的内容使用Volley实现网络的通信,返回给我们的是这一串Json数据{"weatherinfo&quo ...
- 从零开始开发Android相机app(三)简单介绍图像滤镜功能
目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...
- 基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
基于openfire+smack开发Android即时聊天应用[三]-账号信息.添加好友.JID理解等 标签: SmackOpenfireandroid 2015-10-30 18:06 3068人 ...
- Android UI开源软件(三)
android_page_curl android_page_curl 是一个在 Android 上使用 OpenGL ES 实现类似书本翻页效果的示例程序.更多android_page_curl信息 ...
- 使用phoneGap和Sencha Touch 2开发Android应用程序(四)
2019独角兽企业重金招聘Python工程师标准>>> 本文是" 使用phoneGap和Sencha Touch 2开发Android应用程序"系列教程的第4章, ...
- openfire android 发送图片,基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等...
这篇文章主要介绍如何实现点对点单人聊天.多人的群聊.以及如何给对方发送文件,如何发送图片消息和语音消息等功能. 1.单人聊天 1.首先创建聊天对象 /** * 创建聊天窗口 * @param jid ...
- 基于eclipse开发Android天气,基于android平台的天气预报软件的设计与实现.doc
基于android平台的天气预报软件的设计与实现 摘 要 随着智能手机一步步走进普通人的生活,它将成为人们获取信息的主要设备.因此手机的娱乐应用服务将会有很大的发展空间手机快捷查询软件就是其中的一项. ...
最新文章
- 原本要与Hinton当同事,最后被迫Bengio门下读博? | 独立研究员的坎坷之路
- mysql 连接校对_教你轻松的掌握 MYSQL连接字符集和校对
- 导出EXCEL中的文件到资源管理器
- 捡到东西说给钱才给东西?算不算敲诈勒索……
- kata_小规模流处理kata。 第2部分:RxJava 1.x / 2.x
- uniapp网络请求获取数据_2.uni-app 发起网络请求
- flowable springboot 集成 flowableDMN_05
- java中抽象类的定义_Java中抽象类的定义和使用
- jieba库统计出现词语次数
- SQL*Plus环境下创建PLUSTRACE角色
- java代码怎么动态修改xml配置文件内容_[MyBatis]-MyBatis框架-05-动态sql
- 飞秋mac版字符乱码_Mac版QQ的OCR文字识别功能究竟有多好用?
- 软件设计师教程第5版.PDF.高清
- PV、UV、UIP、VV、CPC、CPM、RPM、CTR是什么意思?
- 脚本化HTTP——AJax
- Windows 修改键盘映射(附带Linux下Ubuntu的修改方法)
- 股市日记之“赶火车一景”
- OSChina 周四乱弹 ——阿法狗战胜了李世石
- java计算机毕业设计在线点餐系统源码+mysql数据库+系统+lw文档+部署
- iReader Smart X 连接USB不显示
热门文章
- linux内核模块签名,如何签名内核模块Ubuntu 18.04
- oracle 9I 存储过程复制,使用ADO.NET访问Oracle 9i存储过程(上)_oracle
- GXGetImage方式连续采集和发送软触发采集
- android 去除启动广告_APP启动页广告去除
- 在标签使用onclick(this)来传递参数
- Git 2.18版本发布:支持Git协议v2,提升性能
- 史上最全!27种神经网络简明图解:模型那么多,我该怎么选?
- Fraunhofer ISE多结太阳能电池效率达30.2%
- Ubuntu使用tzselect修改时区
- Linux基础(9)文本处理三剑客之grep