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

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

作者: 丿沧海一粟丿 | 来源:发表于2017-08-27 00:18 被阅读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。
                    }
                });
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/xdtbdxtx.html