RxAndroid的使用方式6-Retrofit2.0使用详解

综述

  retrofit是由square公司开发的。square在github上发布了很多优秀的Android开源项目。例如:otto(事件总线),leakcanary(排查内存泄露),android-times-square(日历控件),dagger(依赖注入),picasso(异步加载图片),okhttp(网络请求),retrofit(网络请求)等等。更多square上的开源项目我们可以去square的GitHub进行查看。这次就来介绍一下retrofit的一些基本用法。retrofit是REST安卓客户端请求库。使用retrofit可以进行GET,POST,PUT,DELETE等请求方式。下面就来看一下retrofit的基本用法。

Retrofit使用方法

retrofit2.0它依赖于OkHttp,而且这部分也不再支持替换。在这里我们也不需要显示的导入okHttp,在retrofit中已经导入okhttp3。

{% highlight java %}
// Retrofit的rx解析库
compile ‘com.squareup.retrofit2:retrofit:2.1.0’
compile ‘com.squareup.retrofit2:adapter-rxjava:2.1.0’
// Retrofit的gson库
compile ‘com.squareup.retrofit2:converter-gson:2.1.0’
compile ‘com.squareup.retrofit2:converter-scalars:2.1.0’
//okhttp
compile ‘com.squareup.okhttp3:okhttp:3.4.1’
compile ‘com.squareup.okhttp3:logging-interceptor:3.4.1’
{% endhighlight %}

创建API接口

  在retrofit中通过一个Java接口作为http请求的api接口。
{% highlight java %}
public interface GitHubService {
// @GET(“user/cover/android”)
@GET(“app/list/homepage”)
Observable getData();
}
{% endhighlight %}

使用方法
Retrofit能够与RxJava进行完美结合。下面就来看一下Retrofit与RxJava是如何结合在一起的。对于RxJava在这就不在进行详细介绍,对于RXJava的使用可以参考附录里面给出链接。 代码如下:

{% highlight java %}
//拦截器,用于输出网络请求和结果的 Log
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//如果你需要在遇到诸如 401 Not Authorised 的时候进行刷新 token
Authenticator mAuthenticator = (route, response) -> {
// Your.sToken = apiManager.refreshToken();
String token = “”;
return response.request().newBuilder()
.addHeader(“Authorization”, “Bearer” + ” ” + token)
.build();
};
//所有网络请求都附上你的拦截器
Interceptor mTokenInterceptor = chain -> {
Request originalRequest = chain.request();
// if (Your.sToken == null || alreadyHasAuthorizationHeader(originalRequest)) {
// return chain.proceed(originalRequest);
// }
Request authorised = originalRequest.newBuilder()
.header(“Authorization”, “Bearer” + ” ” + “”)
.build();
return chain.proceed(authorised);
};
//初始化OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.addNetworkInterceptor(mTokenInterceptor)
.authenticator(mAuthenticator)
.build();
//初始化Retrofit
Retrofit sRetrofit = new Retrofit.Builder()
.baseUrl(ENDPOINT)
.client(client)
// .addConverterFactory(ScalarsConverterFactory.create())//字符
.addConverterFactory(GsonConverterFactory.create())//gson
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 使用RxJava作为回调适配器
.build();
//数据初始化
GitHubService apiManager = sRetrofit.create(GitHubService.class);

    apiManager.getData().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(weatherData -> {
                //结果显示
                mTvText.setText(weatherData.toString());
            }, throwable -> {
                mTvText.setText(throwable.toString());
            });

{% endhighlight %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值