[英]How do I delay RxJava2 subscription?
我有以下代碼,該代碼在響應中返回了大量數據,以至於當我向下滾動太快時(由於並非所有數據都已初始化),在將其加載到android Activity中時會收到NullPointerException,問題,如果我等待一秒鍾,然后滾動。
我想要一種延遲subscribe
部分的方法,以便在我調用setAdapter
時, Response<GetFeedTopicsResponseBody>
完全填充有數據(沒有初始化)。 我嘗試檢查response.isSuccessful
但由於響應本身沒有問題,因此無法正常工作,只是數據需要時間才能從JSON反序列化為Java對象。 我也嘗試了subscribe
onComplete
,但這也不起作用。
因此,我希望RxJava2中的一種方法具有一個布爾值開關,以在完成以下通知后通知下面的訂閱。
mGetFeedTopicsDisposable = ApiClient.getInstance()
.doGetFeedTopicsQuery(request)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
.subscribe((Response<GetFeedTopicsResponseBody> response) -> {
if (response.body() != null) {
List<Topic> topics = response.body().getTopics();
if (topics != null) {
mBinding.fragmentTopicListRecyclerTopics.setAdapter(TopicListAdapter.getInstance(topics));
if (response.body().isPaginated()) {
mRequestBuilder.setCursor(response.body().getCursor());
}
}
}
}, (Throwable ex) -> {
Log.e(TAG, ex.getMessage());
});
我特別收到的錯誤消息是:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.models.User.getThumbnailImageUrl()' on a null object reference
其中,此User
對象設置為Topic
對象的字段,該字段添加到使用getTopics()
檢索的主題列表中。 如果我不滾動,則不會得到此NullPointerException
並且正確加載了用戶的縮略圖URL。
問題:如何延遲RxJava2訂閱?
范例:
我添加了repeat(...)
以更好地理解。
io.reactivex.Observable
.just(new Object())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.delay(10, TimeUnit.SECONDS)
.repeat(2)
.doOnSubscribe(disposable -> Log.d("Delay Example ","Observer subscribed at : "+ DateFormat.getDateTimeInstance().format(new Date()) + " and execute after 10 seconds"))
.subscribe(new DefaultObserver<Object>() {
@Override
public void onNext(Object o) {
Log.d("Delay Example ","on Next : "+ DateFormat.getDateTimeInstance().format(new Date()));
}
@Override
public void onError(Throwable e) {}
@Override
public void onComplete() {
Log.d("Delay Example ","on Complete : "+ DateFormat.getDateTimeInstance().format(new Date()));
}
});
輸出:
您會看到,在Next上兩次被延遲10秒。
在這里,您可以在onComplete
執行與適配器相關的操作。 :)
希望這能回答您提出的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.