rxJava 2.0介绍
Retrofit单独使用示例
1,首先添加依赖和权限
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
<uses-permission android:name="android.permission.INTERNET" />
2,根据接口url返回的数据定义对应的实体类
例如接口 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello world 对应的json格式的数据如下:
定义的实体类Translation.java如下:
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(status);
System.out.println(content.from);
System.out.println(content.to);
System.out.println(content.vendor);
System.out.println(content.out);
System.out.println(content.errNo);
}
}
3,创建用于描述网络请求的接口
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call< Translation > getCall();
}
4,创建retrofit对象
5,获取call实例
6,发送网络请求,处理返回的数据
public void request() {
//步骤4:创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build();
// 步骤5:获取Call实例
Call<Translation> call = retrofit.create(GetRequest_Interface.class).getCall();
//步骤6:发送网络请求(异步)
call.enqueue(new Callback<Translation>() {
//请求成功时回调
@Override
public void onResponse(Call<Translation> call, Response<Translation> response) {
// 步骤7:处理返回的数据结果
response.body().show();
}
//请求失败时回调
@Override
public void onFailure(Call<Translation> call, Throwable throwable) {
System.out.println("连接失败");
}
});
}
retrofit + rxjava
1.因为要结合使用RxJava,所以返回值就不在是一个Call了,而是一个Observable:
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Observable< Translation > getCall();
}
2,创建retrofit实例时,配置关联rxJava2:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
3,步骤5返回的不再是call实例,而是RxJava里面的被观察者Observable实例:
Observable<Translation> observable= retrofit.create(GetRequest_Interface.class).getCall();
4,获取到了Observable的实例,接下来就是rxJava的语法了,如下:
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Translation>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation translation) {
// 成功获取到gson转换后的对象translation
}
@Override
public void onError(Throwable e) {
Log.v("zyl", "请求失败:"+e.getMessage());
}
@Override
public void onComplete() {
}
});