简体   繁体   中英

Retrofit 2 Observable in RxJaxa 1: How to convert to RxJava 2

I was using this code in Retrofit and Rx Java 1 to return an observable from a Retrofit call like this:

mCompositeSubscription.add(
               ServiceFactory.createRetrofitService().setLike(mediaId,sessionMgr.getAuthToken())
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<ResponseBody>() {
                    @Override
                    public final void onCompleted(  ) {}

                    @Override
                    public final void onError(Throwable e) {

                        userMessageHandler.showDialog(mParentActivity,mParentActivity.getString(R.string.error_setting_data_title),
                                mParentActivity.getString(R.string.error_set_like_msg) + e.getMessage(),0);
                    }

                    @Override
                    public void onNext(ResponseBody response) { }
                })
            );

I can't figure out how to convert it to RX Java 2. I have come up with this but not sure it is right:

          .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new DisposableObserver<User>(){
                    @Override
                    public void onNext(User user) {
                        authMgr.setUser(user);
                    }
                    @Override
                    public void onError(Throwable t) {
                        mProgressDlg.dismiss();
                        alertDlg.showIt(mResources.getString(R.string.err_register),
                                t.getMessage(), "",
                                "", mParentActivity, JAlertDialog.POSITIVE,null);
                    }
                    @Override
                    public void onComplete() { }
                });

You should be able to use the RxJava2 adapter in retrofit. This will allow you to have your Retrofit API return RxJava2 types.

Here's a solid example: https://medium.com/3xplore/handling-api-calls-using-retrofit-2-and-rxjava-2-1871c891b6ae

I came up with this but I'm still testing...

 mCompositeDisposable.add( ServiceFactory.createRetrofitService().registerNewUser(BuildConfig.CLIENT_KEY, data.email,
                        data.fname, data.lname, data.birthday,data.city,
                        data.state, mAvatarUrl, coords, Long.toString(mSessionId) ,
                        data.pwd, layerMgr.getNonce() )
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(new DisposableObserver<User>(){
                            @Override
                            public void onNext(User user) {

                            }
                            @Override
                            public void onError(Throwable t) {
                                mProgressDlg.dismiss();
                                alertDlg.showIt(mResources.getString(R.string.err_register),
                                        t.getMessage(), "",
                                        "", mParentActivity, JAlertDialog.POSITIVE,null);
                            }
                            @Override
                            public void onComplete() { }
                        }));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM