[木木方文安卓学习笔记十一]RxJava+OkHttp简单使用

2017-08-27  本文已影响0人  丿沧海一粟丿

因为在iOS中使用RAC、RxSwift,感受到它的好处,比如Btn点击直接传值,不用弯弯绕绕的;数据绑定,自动更新。
所以安卓中也用起来。
引入依赖:
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1’

在LoginVM中实现函数login,返回一个被观察对象LoginResultModel(其中保存数据就在此中VM中进行了,MVVM数据处理一般在VM中)。

public Observable<LoginResultModel> login(final RequestBody paras) {
    return Observable.create(new ObservableOnSubscribe<LoginResultModel>() {
        @Override
        //subscribe手动加上final,以便在post内部使用。
        public void subscribe(final @NonNull ObservableEmitter<LoginResultModel> e) throws Exception {
            LFNetWorking lf = new LFNetWorking();
            lf.post(paras, API.User_Login, new LFCallBack() {
                @Override
                public void successCallBack(String json) {
                    LoginResultModel model = JsonUtil.paraseJson(json, LoginResultModel.class);
                    e.onNext(model);
                    e.onComplete();
                }

                @Override
                public void failueCallBack(Throwable error) {
                    e.onError(error);
                    e.onComplete();
                }
            });
        }
    });
}

在Activity中使用

private void loginBtnAction() {
    final EditText account = (EditText) findViewById(R.id.account);
    final EditText password = (EditText) findViewById(R.id.password);
    String ac = account.getText().toString();
    String pwd = password.getText().toString();
    RequestBody paras = new FormBody.Builder()
            .add("UserName", ac)
            .add("Password", pwd)
            .add("DeviceId", "123")
            .build();
    loginVM.login(paras)
            .subscribe(new Consumer<LoginResultModel>() {
                @Override
                public void accept(LoginResultModel s) throws Exception {
                    Log.i("007:", "accept: " + s.getUser().getFullName().toString());
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    //对应onError,必须写出来,否则onError的时候会崩溃。
                    Log.i("007:", "acceptError: " + throwable.getMessage().toString());
                }
            }, new Action() {
                @Override
                public void run() throws Exception {
                    //对应onComplete。
                }
            });
}
上一篇下一篇

猜你喜欢

热点阅读