关闭

Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架

标签: retrofitokhttpgson网络请求框架okio
34230人阅读 评论(8) 收藏 举报
分类:

Retrofit终于迎来了2.0版本,也修复了老版本的一些bug,这是修复日志,各位可以自己去看看,https://github.com/square/retrofit/blob/master/CHANGELOG.md
注:【转载请注明出处啊】

1.使用retrofit,需要下载一些jar包

retrofit gitHub项目地址:https://github.com/square/retrofit
retrofit 官网地址:http://square.github.io/retrofit/
okHttp gitHub项目地址:https://github.com/square/okhttp
okHttp 官网地址:http://square.github.io/okhttp/
okio gitHub项目地址:https://github.com/square/okio
其实还需要以下jar包
1.gson的jar包 gson-2.4.jar
2.解析gson的转化jar包 onverter-gson-2.0.0-beta2_.jar
3.okhttp-urlconnection-2.5.0.jar
4.httpmime-4.5.jar

2.介绍这些jar包的作用

  • 在1.x版本的retrofit框架:

只需要Retrofit包和gson-2.4.jar包就行了,那时的Retrofit默认是使用okhttp jar包来网络请求的,没有的话就使用自己所带的网络请求,解析默认是gson解析的,所以我们需要添加gson包。但是如果你要使用okhttp来请求的话,必须要添加okhttp-2.5.0.jar、okio-1.6.0.jar、okhttp-urlconnection-2.5.0.jar这三个包。
(1) okhttp-2.5.0.jar:okhttp主要的网络请求代码都在里面
(2) okio-1.6.0.jar:okhttp 所需要的依赖包
(3) okhttp-urlconnection-2.5.0.jar:连接okhttp和retrofit的桥梁,但是在retrofit2.0后,可以不添加这个包,也可以使用okhttp请求了。

  • 在2.0版本的retrofit框架:
    我现在所用的是retrofit-2.0.0-beta2.jar ,目前的最新版本。发现retrofit改变的挺大。
    (1)retrofit必须使用okhttp请求了,如果项目中没有okhttp的依赖的话,肯定会出错
    (2)请求返回的解析不是默认的Gson解析了,需要我们手动去指定。
        Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://apis.baidu.com/showapi_open_bus/showapi_joke/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

这个就是Gson解析了,GsonConverterFactory是需要下载的jar。这是官方原话:
这里写图片描述
加上converter-gson-2.0.0-beta2_.jar包之后,还是需要gson-2.4.jar这个包的,没有的话还是解析不了的
(3)okhttp-urlconnection-2.5.0.jar,我发现在retrofit2.0之后不加也是可以的,但是奇怪的是square公司还是一直在更新这个jar(最新是2015.09)。httpmime-4.5.jar是Apache公司的,用来加快网络请求效率的,搜了网上的一些文章,说这2个jar是用来让网络更快的,我水平有限,深入不了retrofit和okhttp的源码理解,各位加上还是不加都是可以请求的,随意啦~

3.Retrofit的请求

还是和以前一样,通过接口的映射来请求,但是更改了一些请求方式。
以前是:

        RestAdapter retrofit = new RestAdapter.Builder()
            .setEndpoint(请求地址)
            .setLogLevel(LogLevel.FULL)
//          .setConverter(new GsonConverter(new Gson()))
//          .setClient(new OkClient(new OkHttpClient()))
//          .setErrorHandler(new RetrofitErrorHandler())
//          .setRequestInterceptor(requestInterceptor)
            .build();
        GitHubService service = retrofit.create(GitHubService.class);
        返回实体 result = service.请求的接口名称(请求参数);

现在是:

        Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(请求地址)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
        GitHubService service = retrofit.create(GitHubService.class);
        retrofit.Call<返回实体> repos = service.请求的接口名称(请求参数);
        repos.enqueue(new retrofit.Callback<返回实体>() {

            @Override
            public void onResponse(retrofit.Response<返回实体> response, Retrofit retrofit) {
                返回实体 body = response.body();
                LogUtil.i(TAG, body.toString());

            }

            @Override
            public void onFailure(Throwable throwable) {
                // TODO Auto-generated method stub

            }
        });

4.删除一些类

(1)RequestInterceptor类
2.0中retrofit的请求拦截类被删除了,现在直接用的okhttp的请求拦截类

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response = chain.proceed(chain.request());
        // Do anything with response here
        return response;
    }
});
// 然后传递创建的client到Retrofit的Builder链中。
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(请求地址)
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build();

(2)删除ErrorHandler接口和RetrofitError类
没有错误的提示了,同意集中在 callback的onFailure(Throwable throwable)的异常错误中了。

5.同步请求和异步请求方式改变

以前是:

//在接口映射中
public interface GitHubService{
    //同步请求  
    @POST("joke_text")
    返回实体 请求接口名称(请求参数);

  //异步请求
   @POST("joke_text")
   void 请求接口名称(Callback<返回实体> cb);
}

2.0现在是:

    // 同步请求
    Call<返回实体> call = service.请求接口名称();
    返回实体 repo = call.execute();

    // 异步请求
    Call<返回实体> call = service.请求接口名称();
    call.enqueue(new Callback<返回实体>() {
        @Override
        public void onResponse(Response<返回实体> response, Retrofit retrofit) {
            // Get result bean from response.body()
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });

6.Url的重新定义

这个里面的介绍比较详细 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0915/3460.html
这篇文章写的比较好,可以参考一下。

7.总结

搞了这么多,终于可以使用retrofit+okhttp+gson超级网络请求框架了,网上说目前这个是最快的网络请求,比google的volley还快点,至于真假,就不知道了,但是不可否认,确实挺好用的,效率也是杠杠的。
就单独的来说,OkHttp的网络请求也是很好用的,推荐文章鸿神的http://blog.csdn.net/lmj623565791/article/details/47911083
可惜单独的Retrofit不能网络请求了,感觉这是2.0最不爽的地方了。当然组合使用应该是更爽的吧。

所有最新依赖包下载:http://download.csdn.net/detail/u012301841/9248139
demo示例下载:http://download.csdn.net/detail/u012301841/9248155

5
2
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Retrofit + GSON处理JSON模板

动机 首先封装了Retrofit的一些操作,也就是回调的时候不必去为每个javabean的每个操作去写一个Callback,所有的bean公用一个Callback。 使用了MVP的设计思想,加上公用的...
  • HaveFerrair
  • HaveFerrair
  • 2016-05-25 16:10
  • 4142

Retrofit中使用GSON解析定制格式的JSON

在Retrofit中默认使用GSON解析JSON数据。使用GSON将json转换为POJO对象
  • fumier
  • fumier
  • 2015-09-14 19:45
  • 3856

Rxjava+Retrofit+Gson组合框架的使用(一)

retrofit的基本使用
  • lusmail
  • lusmail
  • 2016-11-01 00:34
  • 721

RxJava+Retrofit+Gson实现网络请求

RxJava+Retrofit+Gson+okHttp完美组合,真的是太强大了,实现网络请求那是so easy。简洁,高效,扩展性强。对这些框架还不熟悉的,感觉去自学撸代码。 可以看我前几篇文章: ...
  • dzsw0117
  • dzsw0117
  • 2016-05-05 12:49
  • 2536

retrofit gson 解析json数据失败问题“com.google.gson.stream.MalformedJsonException:”

json服务端返回数据 {'success':'fail'} retrofit 版本:2.3.0 具体问题: com.google.gson.stream.Malfor...
  • zhangshan415
  • zhangshan415
  • 2017-05-26 12:09
  • 1706

Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava

Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava Retrofit,因为其简单与出色的性能,也是受到很多人的青睐,但是他和以往的...
  • qq_26787115
  • qq_26787115
  • 2016-11-15 22:52
  • 8732

Retrofit 自定义Gson对象解决日期格式问题

自定义Gson对象 为了以防你需要调整json里面的一些格式,比如,Date Format。你可以创建一个Gson 对象并把它传递给GsonConverterFactory.create()。 Gs...
  • cheng9981
  • cheng9981
  • 2016-11-24 16:20
  • 489

Retrofit统一处理服务器返回参数

想了下还是写下这篇博客,去年遇到的一个坑。 关于这个服务器返回的请求状态,我以前用的是这种方式: 给 Android 开发者的 RxJava 详解 RxJava+Retrofit,在联网返回后如...
  • u010386612
  • u010386612
  • 2017-03-28 15:43
  • 1785

Android框架之路——Retrofit2.0的初窥(包含Gson)

使用姿势:   1. 使用教程 添加依赖 compile ‘com.squareup.retrofit2:retrofit:2.2.0’ compile ‘com.squareup.retrofit...
  • bskfnvjtlyzmv867
  • bskfnvjtlyzmv867
  • 2017-04-24 23:42
  • 389

Retrofit2.0使用详解

retrofit是由square公司开发的。square在github上发布了很多优秀的Android开源项目。例如:otto(事件总线),leakcanary(排查内存泄露),android-tim...
  • ljd2038
  • ljd2038
  • 2016-04-03 01:09
  • 51280
    个人资料
    • 访问:281168次
    • 积分:4053
    • 等级:
    • 排名:第8843名
    • 原创:143篇
    • 转载:5篇
    • 译文:20篇
    • 评论:58条
    个人网站