首页 理论教育 使用OkHttp3请求天气预报的方法和技巧

使用OkHttp3请求天气预报的方法和技巧

时间:2023-06-27 理论教育 版权反馈
【摘要】:添加以上内容,程序会自动下载两个库,一个是OkHttp,另一个是Okio库,后者是前者通信的基础。目前OkHttp最新的版本是3.8.1,可以从OkHttp的主页查看版本。图9-10 下载的OkHttp和Okio库下面是OkHttp的具体用法。Request request=new Request.Builder().url.build();调用OkHttpClient的newCall()方法,创建Call对象,并调用它的execute()方法,发送请求并获取服务器返回的数据。下面是Android使用OkHttp获取天气的过程。在Android2.3中创建应用项目:OkHttp Wheather。

使用OkHttp3请求天气预报的方法和技巧

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中增加如下内容。

978-7-111-58810-8-Chapter09-45.jpg

添加以上内容,程序会自动下载两个库,一个是OkHttp,另一个是Okio库,后者是前者通信的基础。目前OkHttp最新的版本是3.8.1,可以从OkHttp的主页查看版本。下载后,可在项目的ExternalLibraries项看到下载的库,如图9-10所示。

978-7-111-58810-8-Chapter09-46.jpg

图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对象以存放参数,如下所示。

978-7-111-58810-8-Chapter09-47.jpg

接下来的操作和前面相同。

本项目为天气预报,首要的问题是如何获得天气信息,本项目从中国天气网获得这些信息,天气网的网址:http://www.weather.com.cn/。

如何获取全国所有省份的信息呢?我们只要访问以下网址http://www.weather.com.cn/data/list3/city.xml,即可返回中国所有省份的名称和代号,如图9-11所示。

978-7-111-58810-8-Chapter09-48.jpg

图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)

978-7-111-58810-8-Chapter09-49.jpg

图9-12 查看省内城市信息

采用同样的方法,访问杭州以下的县市的信息,只需要在city后添加2101即可:ht-tp://www.weather.com.cn/data/list3/city2101.xml,如图9-13所示。

978-7-111-58810-8-Chapter09-50.jpg

图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所示。

978-7-111-58810-8-Chapter09-51.jpg

图9-14 获取杭州市区天气信息

注意,这个网址的后缀是html,不是xml,编写代码的时候不要写错了,完成操作后,服务器即会把杭州市区的天气信息以JSON格式返回给我们,如下所示。

978-7-111-58810-8-Chapter09-52.jpg

下面是Android使用OkHttp获取天气的过程。在Android2.3中创建应用项目:OkHttp Wheather。

(1)在内层的build.gradle文件,也就是app/build.gradle文件的dependencies中增加如下内容。

978-7-111-58810-8-Chapter09-53.jpg

(2)在项目配置文件app/src/AndroidManifest.xml中添加网络权限,代码如下。

<uses-permission android:name="android.permission.INTERNET"/>

(3)res/layout目录下主布局文件activitymain.xml的布局如图9-15所示。

978-7-111-58810-8-Chapter09-54.jpg

图9-15 主布局文件

(4)主Activity文件MainActivity.java的代码如下。

978-7-111-58810-8-Chapter09-55.jpg

978-7-111-58810-8-Chapter09-56.jpg

(5)项目运行结果如图9-16所示。

978-7-111-58810-8-Chapter09-57.jpg

图9-16 项目运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈