这几天终于会使用Rxjava和Retrofit了,然后就写了一个登录验证的小案例,供大家参考
1、添加依赖:
<span style="font-size:18px;"> compile 'io.reactivex:rxjava:1.2.1'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'</span>
2、代码:
<span style="font-size:18px;">//新建一个API接口
public interface MyServer {
//登录时的用户信息
@GET("/login")
Observable<String>login(@Query("userName")String userName,
@Query("passWord")String passWord);
//登录获取Token
@GET("/user")
Observable<UserInfo> getUser(@Query("token")String token);</span>
}
注:Token的含义:
Token是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token的值会保存到微信后台。只有服务器和微信后台知道这个字符串,也就是说只有微信后台和公众账号服务器知道这个字符串。于是Token就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。
//新建一个UserInfo public class UserInfo { private String userName; private String passWord; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
//登录 public class MyLogin { public String URL_LOGIN = ""; public String userName = ""; public String passWord = ""; public void login(){ //创建Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl(URL_LOGIN) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); //获取接口实例 final MyServer server = retrofit.create(MyServer.class); server.login(userName,passWord) .flatMap(new Func1<String, Observable<UserInfo>>(){ @Override public Observable<UserInfo> call(String token) { return server.getUser(token); //获取Token,然后验证 } }) .subscribeOn(Schedulers.newThread()) //事件产出在一个新线程中 .observeOn(Schedulers.io()) //在io线程保存用户信息 .doOnNext(new Action1<UserInfo>() { @Override public void call(UserInfo userInfo) { SaveUserInfo(userInfo); } }) .observeOn(AndroidSchedulers.mainThread()) //事件消费在主线程中 .subscribe(new Observer<UserInfo>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(UserInfo userInfo) { userView.setUser(userInfo); } }); } }