OkHttp是由大名鼎鼎的Square公司开发的,除了OkHttp之外,该公司还开发了Picas-so、Retrofit等著名的开源项目。OkHttp不仅在封装上做得简单容易,连底层实现也独具特色,和HttpURLConnection相比,更加出色,OkHttp官网地址:http://square.github.io/okht-tp/,OkHttp GitHub地址:https://github.com/square/okhttp。
OkHttp是一个Http请求框架,相当于Android原生的HttpChent和httpURLConnectiond的封装,写法更加简单,可以处理更加复杂的网络请求。
在使用OkHttp之前,要在内层的build.gradle文件,即app/build.gradle文件的depend-encies中增加如下内容。
添加以上内容,程序会自动下载两个库,一个是OkHttp,另一个是Okio库,后者是前者通信的基础。目前OkHttp最新的版本是3.8.1,可以从OkHttp的主页查看版本。下载后,可在项目的ExternalLibraries项看到下载的库,如图9-10所示。
图9-10 下载的OkHttp和Okio库
下面是OkHttp的具体用法。
(1)首先创建一个OkHttpClient的实例,代码如下。
OkHttpClient client=new OkHttpClient();
(2)创建一个Request对象,设置目标地址,代码如下。
Request request=new Request.Builder().url("http://www.baidu.com").build();
(3)调用OkHttpClient的newCall()方法,创建Call对象,并调用它的execute()方法,发送请求并获取服务器返回的数据。
Response response=client.newCall(request).execute();
(4)其中,Response对象就是服务器返回的数据,获取返回的内容。
String responseData=response.body().string();
(5)如果发起的是POST请求,则会比GET请求复杂一些,先构造出一个RequestBody对象以存放参数,如下所示。
接下来的操作和前面相同。
本项目为天气预报,首要的问题是如何获得天气信息,本项目从中国天气网获得这些信息,天气网的网址:http://www.weather.com.cn/。
如何获取全国所有省份的信息呢?我们只要访问以下网址http://www.weather.com.cn/data/list3/city.xml,即可返回中国所有省份的名称和代号,如图9-11所示。
图9-11 http://www.weather.com.cn/data/list3/city.xml中的信息
返回的值:01|北京,02|上海,03|天津,21|浙江等,可以看到,城市与其代号之间通过“|”相隔开,省份与省份之间用逗号隔开,要记住这个结构,之后会用到这种表达式截取信息。
如何查看浙江省内的城市的信息呢?其实非常简单,只需要访问以下网址http://www.weather.com.cn/data/list3/city21.xml,也就是将省级代号添加至city后面即可,服务器将返回数据2101|杭州,2102|湖州,2103|嘉兴等,如图9-12所示。(www.xing528.com)
图9-12 查看省内城市信息
采用同样的方法,访问杭州以下的县市的信息,只需要在city后添加2101即可:ht-tp://www.weather.com.cn/data/list3/city2101.xml,如图9-13所示。
图9-13 查看杭州以下的县市的信息
掌握了以上方法,就可以获得全国省市区的信息了,那么,如何得到某具体城市的天气呢?以杭州市区为例,其县级代号为210101,访问以下网址:http://www.weather.com.cn/data/list3/city210101.xml。即会返回一个很简单的数据:210101|101210101210101|101210101,后面就是杭州市区所对应的天气代号,之后通过得到的代号即访问以下网址ht-tp://www.weather.com.cn/data/cityinfo/101210101.html,如图9-14所示。
图9-14 获取杭州市区天气信息
注意,这个网址的后缀是html,不是xml,编写代码的时候不要写错了,完成操作后,服务器即会把杭州市区的天气信息以JSON格式返回给我们,如下所示。
下面是Android使用OkHttp获取天气的过程。在Android2.3中创建应用项目:OkHttp Wheather。
(1)在内层的build.gradle文件,也就是app/build.gradle文件的dependencies中增加如下内容。
(2)在项目配置文件app/src/AndroidManifest.xml中添加网络权限,代码如下。
<uses-permission android:name="android.permission.INTERNET"/>
(3)res/layout目录下主布局文件activitymain.xml的布局如图9-15所示。
图9-15 主布局文件
(4)主Activity文件MainActivity.java的代码如下。
(5)项目运行结果如图9-16所示。
图9-16 项目运行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。