android Retrofit 2.0网络请求库

我们一起先来了解Retrofit吧,Retrofit是Square开 发的一个Android和Java的REST客户端库。
这个库非常简单并且具有很多特性,相比其他的网络库,更容易让初学者快速掌握。
它可以处理GET、 POST、PUT、DELETE…等请求,还可以使用picasso加载图片。
再来看看目标架构如下图
Retrofit架构图
别纠结了,开始编码吧!!!
编码之前大家可以看看Retrofit官网
1. 设置
1)权限:首先确保在AndroidManifest.xml中请求了网络权限:

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

2. 导包
1)Eclipse:下载jar包
2)Android Studio:通过配置gradle配置将Retrofit框架引入项目。也可以可以直接 File->Project Structure->Dependencies->Library dependency 搜索Retrofit即可,添加以下版本的就可以咯。

compile 'com.squareup.retrofit:retrofit:2.0.2-beta2'  
compile 'com.squareup.retrofit:converter-gson:2.0.2-beta2

上面那个包已经是目前最新的,不建议直接使用不要偷懒还是去github官网看看吧。

3.Retrofit怎么用

1)虽然Retrofit官网已经说明了,我还是要按照我的思路说一下。
比如你要请求这么一个API:

http://apicloud.mob.com/v1/mobile/address/query?key=123456&phone=133****982

这是一个查询手机号码归属地的请求示例。
2)查看gitHub上某个repo的contributors,首先你要这样创建一个接口:

public interface GitHubClient {
    @GET("mobile/address/query?")
    Call<Gitmodel> searchPhone(
    @Query("key") String key,
    @Query("phone") String phone);
}

3)然后你还需要创建一个Retrofit对象:

//API接口的地址
private String API_URL= "http://apicloud.mob.com/";
//创建一个非常简单的适配器点GitHub的API
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(API_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

4)再用这个Retrofit对象创建一个GitHub对象:

//GitHub的API接口创建一个实例
GitHubClient api = retrofit.create(GitHubClient.class);
//创建一个调用实例的查找Retrofit call
Call<Gitmodel> call = api.searchPhone("123456", phoneNumber);

5)最后你就可以用这个Githb对象获得数据了:

//获取并打印库的call列表
call.enqueue(new Callback<Gitmodel>() {
     @Override
     public void onResponse(Call<Gitmodel> call, Response<Gitmodel> response) {
         Gitmodel gitmodel = response.body();
         if (gitmodel != null) {
             resultLayout.setVisibility(View.VISIBLE);
             city.setText("城市:" + gitmodel.getResult().getCity());
             cityCodeText.setText("归属地:" + gitmodel.getResult().getCityCode());
             operatorText.setText("运营商:" + gitmodel.getResult().getOperator());
             mobileNumberText.setText("手机号:"+ gitmodel.getResult().getMobileNumber());
             provinceText.setText("省份:"+ gitmodel.getResult().getProvince());
             zipCodeText.setText("邮政编码:"+ gitmodel.getResult().getZipCode());
          }
    }
    @Override
    public void onFailure(Call<Gitmodel> call, Throwable t) {
    }
});

就这么简单,上述代码已经实现通过retrofit访问restful api获取数据并显示。
4.最后
Retrofit非常巧妙的用注解来描述一个HTTP请求,将一个HTTP请求抽象成一个Java接口,然后用了Java动态代理的方式,动态的将这个接口的注解“翻译”成一个HTTP请求,最后再执行这个HTTP请求

Retrofit的功能非常多的依赖Java反射,代码中其实还有很多细节,比如异常的捕获、抛出和处理,大量的Factory设计模式(为什么要这么多使用Factory模式?)

Retrofit中接口设计的恰到好处,在你创建Retrofit对象时,让你有更多更灵活的方式去处理你的需求,比如使用不同的Converter、使用不同的CallAdapter,这也就提供了你使用RxJava来调用Retrofit的可能

我也慢慢看了Picasso和Retrofit的代码了,收获还是很多的,也更加深入的理解面向接口的编程方法,这个写代码就是好的代码就是依赖接口而不是实现最好的例子

好感谢开源的世界,让我能读到大牛的代码。我一直觉得一个人如果没有读过好的代码是不太可能写出好代码的。什么是好的代码?像Picasso和Retrofit这样的就是好的代码,扩展性强、低耦合、插件化

5.相关
如果你感觉还没有太明白可以看一看一下视频:
视频
6.总结
Retrofit使用的最核心的两个技术:动态代理和反射。
其实Retrofit无非就是让用户创建接口,使用自己指定的规则进行网络访问,把接口传入Retrofit,接口上附着的规则由Retrofit进行层层解析后,再进行实际的网络调用。Retrofit所做的事情就是帮助用户简化了大量的网络访问代码,用户只需写少量代码就能得到想要的结果。如果你懂OO设计,了解一定的设计模式且熟悉JAVA的API,那么你完全可以自己写一个类似Retrofit一样的网络框架!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值