Android之Retrofit的使用

使用Retrofit(这是一个极其棒的网络请求库)来制作一个访问雅虎天气的demo。一步一步看看Retrofit是如何完成的。

yahoo 天气 json

首先我们来到这个链接(https://developer.yahoo.com/weather/),改写需要查询的地点为北京

20160721094902

根据这张图,你可以看到yahoo给我返回的json和访问这个json的api链接。

还要小调整一下,默认你会看到返回的json中 “temperature”: “F” ,我们需要把他改成 “temperature”: “C”(摄氏温度),要在原来的YQL中加入( and u=’c’)

 

 

安装Retrofit库

Retrofit是一个不错的网络请求库,而且用起来很省事。

打开https://github.com/square/retrofit ,你会看到它的详细信息,包括一个官网http://square.github.io/retrofit/。

使用Gradle方式安装它:

把上面的代码附加到(build.gradle(Module.app)):

然后,点击 android studio 右上角的 sync now 进行安装

20160721101843

还没完,来到http://square.github.io/retrofit/。我们还需要使用到Gson,所以我们还要安装它才行,加入:

ok。

 

jsonschema2pojo

这个小工具是用来将JOSN转换成普通的java对象类。我们可以把我们之前生成的json放入到里面去,来创建我们需要的java对象。

打开这个工具的网址:http://www.jsonschema2pojo.org/

20160721154144

区域1:填写你之前【yahoo天气json】获取的json数据

Package:com.example.napoleon.myapplication.data 这是我们要放置的包名

Class name:Weather  我们需要创建的类名

点击:Preview可以预览要生成的Model类,Zip可以生成并下载这些类。

如果下载完毕,我们把相关的类,copy到我们的项目中去:

20160721163757

 

 

但是你copy这些文件后,他们有错误:

怎么处理呢?

我们需要在build.gradle中添加

如下位置

安装后,就不会报错了。

 

创建WeatherAPI

来到项目中,创建remote包,并创建WeatherAPI接口,来让你的HTTP API转换成a Java interface,粘贴Retrofit官网前几步到你的文件中:

 Retrofit可以将你的HTTP API转化为JAVA的接口的形式。例如:

而Retrofit类能够生成对应接口的实现。例如:

每一个由接口返回的Call对象都可以与远程web服务端进行同步或者异步的HTTP请求通信。例如:

Retrofit使用注解来描述HTTP请求:
1.URL参数的替换和query参数的支持
2.对象转化为请求体(如:JSON,protocol buffers等)
3.多重请求体和文件上传
注意:本站仍在为2.0扩展新的API

 

好了,我们要根据我们之前获取json的url,分析来改写这个类:

具体可查看http://square.github.io/retrofit/

还没完你知道这样是不行的,我们还要进一步优化:

上面方便我们日后的使用,并且做了一个判断,当我们有WeatherAPI时,我们无需再生成对应的接口了。

 

 

构建视图

视图的布局和组件代码如下:

下面是WeatherActivity的代码:

 

我们使用了一个ButterKnife插件,他的安装也很简单。

需要在(Project:MyApplication)的build.gradle中加入classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’:

GRADLE:

再往Android Studio上安装该插件

androidstudiobutterknife

 

 

 绑定数据

程序需要点击刷新按钮,然后显示相应的天气信息,我们现在需要一个OnClick事件:

然后将数据绑定到各个控件上:

还需要将这个类设置为启动页,来到AndroidManifest.xml文件,改写为WeatherActivity

当然别忘了加入访问网络的权限

如果你使用Genymotion一定要注意虚拟机也要联网哦。如果用的是wifi那么虚拟机也要连接wifi的。

 

看看效果:

20160723121152

 

 

发表评论