**版权声明:本文为小斑马伟原创文章,转载请注明出处!
在第五篇和第六篇博客中,分别介绍了Retrofit基本使用和RxJava的使用。本编博客续写,两者的结合使用的方法。使得网络请求变得更加方便,流程控制更加清晰。
一、添加网络请求权限和依赖
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
二、创建Retrofit对象,并添加RxJava的CallAdapter
String baseUrl = "http://192.168.31.242:8080/weiwei/user";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
这样使得Retrofit网络请求框架支持RxJava。
三、重新定义接口类,返回值改为Observable
public interface IUserInfo {
@GET("users")
Observable<List<User>> getUsers();
}
四、拿到接口对象的实例
IUserInfo userInfo = retrofit.create(IUserInfo.class);
五、使用RxJava的方式请求网络
userInfo.getUsers()
.subscribeOn(Schedulers.io()) //IO线程中执行
.observeOn(AndroidSchedulers.mainThread()) //执行完之后在主线程中处理
.subscribe(new Subscriber<List<User>> { //被观察者订阅观察者
@Override
public void onCompleted() {
//请求结束
}
@Override
public void onError(Throwable e) {
//处理错误
}
@Override
public void onNext(List<User> users) {
//处理请求结果
}
});
)
使用RxJava和Retrofit相结合发起POST请求实现登录功能
/**发起POST请求实现登录**/
private void login() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://35.185.149.228")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
IUSerLogin userLogin = retrofit.create(IUSerLogin.class);
userLogin.login("weiwei","123")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<RespLoginModel>() { //被观察者去订阅观察者
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(RespLoginModel respLoginModel) {
Log.i("weiwei","onNext"+respLoginModel.toString());
}
});
}
public class RespLoginModel {
public int status;
public User data;
}
private class User {
/**
* 'id' :用户id
* 'username' :用户名
* 'avatar' : 用户默认头像路径
* 'token' :用户token
*/
private String id;
private String username;
private String avatar;
}
public interface IUSerLogin {
@POST("/user/do-login")
@FormUrlEncoded
Observable<RespLoginModel> login(@Field("login_username") String username, @Field("login_password") String password);
}
RxJava和Retrofit结合使用,使得网络请求变得更加方便,流程控制更加清晰,而且可以发挥RxJava极大的优势。它的线程控制变得简单,由于定的接口对象是被观察者所有在调用接口对象时可以指定它数据请求在子线程中,然后界面的更新,观察者接受到数据进行处理是在主线程中,通过subscribeOn方法和observeOn方法轻松的做到线程控制。
网友评论