簡體   English   中英

RxAndroid鏈動作

[英]RxAndroid chain actions

我正在使用RxAndroid + Retrofit,我想做的是將2個動作合而為一。 例如,我有兩種方法。 第一個在onNext塊中返回一些URL。

apiRequests.getApi().getURL()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<CreateUserResponse>() {
                @Override
                public void onCompleted() {
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(CreateUserResponse createUserResponse) {
                    secondMethos(createUserResponse.getURL()); // HERE GOES THE URL

                }
            });

第二種方法用戶使用此URL做其他事情

public void secondMethod(URL){
    Observable.create(new Observable.OnSubscribe<Object>() {


        @Override
        public void call(Subscriber<? super Object> subscriber) {

        }
    });

    Observable.create(new Observable.OnSubscribe<List<Arg>>() {
        @Override
        public void call(Subscriber<? super List<Arg>> subscriber) {
            subscriber.onNext(test(URL));
            subscriber.onCompleted();

        }
    }).subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Arg>>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(List<Arg> params) {

                }
            });


}

是否可以將這些方法合而為一? 謝謝

您可以這樣簡單地映射值

    apiRequests.getApi().getURL()
            .map(new Func1<CreateUserResponse, List<Arg>>() {
                public List<Arg> call(CreateUserResponse response) {
                    return test(response.getURL());
                }
            })
            .subscribeOn(Schedulers.newThread())
            .observerOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Arg>>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(List<Arg> params) {

                }

注意,如果要用每個Arg而不是List<Arg>調用onNext,則可以如下使用flatMapInterable。

    apiRequests.getApi().getURL()
            .flatMapIterable(new Func1<CreateUserResponse, List<Arg>>() {
                public List<Arg> call(CreateUserResponse response) {
                    return test(response.getURL());
                }
            })
            .subscribeOn(Schedulers.newThread())
            .observerOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Arg>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(Arg params) {

                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM