对Rxjava和Retrofit的一次封装使用

这几天终于会使用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);
                    }
                });
    }
}



 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值