RXJava与Retrofit联合使用
2018-03-27 18:02
295 查看
1、准备材料:
Retrofit2、0
RXJava2、0
2、首先我们来叙说一下Retrofit的基本概念:
定义:一个Restful设计风格的HTTP网络请求框架、基于okhttp
作者:square公司
功能:支持同步,异步网络请求,多种数据格式解析,提供对RXJava支持
3、然后呢我们在回顾一下RXJava基本概念:
定义:RXJava是一个基于事件流,实现异步操作的库
作用:实现异步操作,类似于Android中的AsyncTask和Handler的作用
优点:基于事件流的链式调用——逻辑简洁,实现优雅,使用简单;随着程序逻辑的复杂性提高它依然能够保持简洁的风格
4、基本使用:访问金山词霸的翻译接口
build.gradle(项目model中的)中添加依赖
创建接收服务器返回数据的JavaBean
创建用于描述网络请求的接口
创建Retrofit实例
创建网络请求接口实例 配置网络请求参数
发送网络请求
对返回的数据进行处理
5、添加 网络权限--清单文件里<uses-permission android:name="android.permission.INTERNET" />1、金山词霸API的数据格式说明:// URL模板 http://fy.iciba.com/ajax.php
// URL实例 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world
// 参数说明:
// a:固定值 fy
// f:原文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// t:译文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// w:查询内容json格式说明/**
* status:请求成功则返回1
* content:内容信息
* form:原文内容类型
* to:译文内容类型
* vendor:来源平台
* out:译文内容
* err_no:请求成功时取0
* */
{
"status":1,
"content":{
"from":"en-Eu",
"to":"zh-CN",
"vendor":"baidu",
"out":"你好世界<br/>",
"err_no":0,
}
}JavaBean:示例public class Translation {
private int status;
private content content;
private static class content {
private String from;
private String to;
private String vendor;
private String out;
private int errNo;
}
//定义 输出返回数据 的方法
public void show() {
System.out.println( "Rxjava翻译结果:" + status);
System.out.println("Rxjava翻译结果:" + content.from);
System.out.println("Rxjava翻译结果:" + content.to);
System.out.println("Rxjava翻译结果:" + content.vendor);
System.out.println("Rxjava翻译结果:" + content.out);
System.out.println("Rxjava翻译结果:" + content.errNo);
}
}创建用于描述网络请求的接口:/**
* Created by com_c on 2018/3/27.
*/
public interface GetRequest_Interface {
@FormUrlEncoded
@POST("ajax.php?a=fy&f=auto&t=auto")
Observable<Translation> getCall(
@Field("w") String context
);
}单例模式创建Retrofit//create RetrofitAPI
public static GetRequest_Interface createrApi() {
if (retrofit == null) {
synchronized (RetrofitUtils.class) {
if (retrofit == null) {
//打印服务器请求头
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//okhttp client
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.addNetworkInterceptor(interceptor)
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
//Retrofit 实例化并返回
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}
}
}
return retrofit.create(GetRequest_Interface.class);
}使用网络请求retrofit.getCall(content)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Translation>() {
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation translation) {
tvName.setText(translation.show().toString());
}
});
Retrofit2、0
RXJava2、0
// Android 支持 Rxjava // 此处一定要注意使用RxJava2的版本 compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' // Android 支持 Retrofit compile 'com.squareup.retrofit2:retrofit:2.1.0' // 衔接 Retrofit & RxJava // 此处一定要注意使用RxJava2的版本 compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' // 支持Gson解析 compile 'com.squareup.retrofit2:converter-gson:2.1.0' // compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
2、首先我们来叙说一下Retrofit的基本概念:
定义:一个Restful设计风格的HTTP网络请求框架、基于okhttp
作者:square公司
功能:支持同步,异步网络请求,多种数据格式解析,提供对RXJava支持
3、然后呢我们在回顾一下RXJava基本概念:
定义:RXJava是一个基于事件流,实现异步操作的库
作用:实现异步操作,类似于Android中的AsyncTask和Handler的作用
优点:基于事件流的链式调用——逻辑简洁,实现优雅,使用简单;随着程序逻辑的复杂性提高它依然能够保持简洁的风格
4、基本使用:访问金山词霸的翻译接口
build.gradle(项目model中的)中添加依赖
创建接收服务器返回数据的JavaBean
创建用于描述网络请求的接口
创建Retrofit实例
创建网络请求接口实例 配置网络请求参数
发送网络请求
对返回的数据进行处理
5、添加 网络权限--清单文件里<uses-permission android:name="android.permission.INTERNET" />1、金山词霸API的数据格式说明:// URL模板 http://fy.iciba.com/ajax.php
// URL实例 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world
// 参数说明:
// a:固定值 fy
// f:原文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// t:译文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// w:查询内容json格式说明/**
* status:请求成功则返回1
* content:内容信息
* form:原文内容类型
* to:译文内容类型
* vendor:来源平台
* out:译文内容
* err_no:请求成功时取0
* */
{
"status":1,
"content":{
"from":"en-Eu",
"to":"zh-CN",
"vendor":"baidu",
"out":"你好世界<br/>",
"err_no":0,
}
}JavaBean:示例public class Translation {
private int status;
private content content;
private static class content {
private String from;
private String to;
private String vendor;
private String out;
private int errNo;
}
//定义 输出返回数据 的方法
public void show() {
System.out.println( "Rxjava翻译结果:" + status);
System.out.println("Rxjava翻译结果:" + content.from);
System.out.println("Rxjava翻译结果:" + content.to);
System.out.println("Rxjava翻译结果:" + content.vendor);
System.out.println("Rxjava翻译结果:" + content.out);
System.out.println("Rxjava翻译结果:" + content.errNo);
}
}创建用于描述网络请求的接口:/**
* Created by com_c on 2018/3/27.
*/
public interface GetRequest_Interface {
@FormUrlEncoded
@POST("ajax.php?a=fy&f=auto&t=auto")
Observable<Translation> getCall(
@Field("w") String context
);
}单例模式创建Retrofit//create RetrofitAPI
public static GetRequest_Interface createrApi() {
if (retrofit == null) {
synchronized (RetrofitUtils.class) {
if (retrofit == null) {
//打印服务器请求头
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//okhttp client
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.addNetworkInterceptor(interceptor)
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
//Retrofit 实例化并返回
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}
}
}
return retrofit.create(GetRequest_Interface.class);
}使用网络请求retrofit.getCall(content)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Translation>() {
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation translation) {
tvName.setText(translation.show().toString());
}
});
相关文章推荐
- Android:Retrofit 与 RxJava联合使用大合集(含实例教程)!
- Android:Retrofit 与 RxJava联合使用大合集(含实例教程)!
- Okhttp+Retrofit+Rxjava+MVP联合使用
- Retrofit+RxJava的联合使用
- Retrofit+RxJava的联合使用
- rxjava 和retrofit 结合使用
- RxJAVA和Retrofit在安卓中网络请求使用实例
- 初学者--Android Retrofit+RxJava+OkHttp使用post请求
- Android框架学习之Retrofit(二)RxJava和Retrofit2.0的结合使用
- RXJava+Retrofit的结合使用,来同时请求多个网络接口,我们使用的是merge或mergeArray操作符
- Android Retrofit 2.0(二)使用教程OkHttp3 + Gson + RxJava
- RxJava和Retrofit结合使用 封装类
- RxJava + Retrofit 结合使用
- Retrofit和Rxjava的简单使用
- Retrofit+RxJava的使用
- 使用 RxJava 和 Retrofit
- Retrofit+Rxjava简单使用
- Android RxJava/RxAndroid结合Retrofit使用
- 我们真的需要使用RxJava+Retrofit吗?
- 使用Retrofit和RxJava