rxjava: Can I use retry() but with delay?

后端 未结 14 2254
别那么骄傲
别那么骄傲 2020-11-28 18:25

I am using rxjava in my Android app to handle network requests asynchronously. Now I would like to retry a failed network request only after a certain time has passed.

14条回答
  •  醉梦人生
    2020-11-28 19:18

    Simply do it like this:

                      Observable.just("")
                                .delay(2, TimeUnit.SECONDS) //delay
                                .flatMap(new Func1>() {
                                    @Override
                                    public Observable call(String s) {
                                        L.from(TAG).d("postAvatar=");
    
                                        File file = PhotoPickUtil.getTempFile();
                                        if (file.length() <= 0) {
                                            throw new NullPointerException();
                                        }
                                        return Observable.just(file);
                                    }
                                })
                                .retry(6)
                                .subscribe(new Action1() {
                                    @Override
                                    public void call(File file) {
                                        postAvatar(file);
                                    }
                                }, new Action1() {
                                    @Override
                                    public void call(Throwable throwable) {
    
                                    }
                                });
    

提交回复
热议问题