我的問題是什麼是一個適配器訂閱多個觀測適配器訂閱多個觀測量
最好的方式,我有一個有頭和經常項目類型的適配器。適配器的信息使用Sqlbrite從數據庫提供。使用Sqlbrite,我想通過讓適配器訂閱observable來更新頭和列表。
第一個Observable不是問題。在我的片段的的onResume:
mSubscription = TrackerDbUtils.getListSubmissionObservable(db)
.map(Submission.MAP)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mAdapter);
不過,我再嘗試第二個可觀測添加到片段
mHeaderSubscription = TrackerDbUtils.getSummaryObservable(db)
.map(Summary.MAP)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mAdapter);
所以,我需要在我的適配器來實現措施1:
public class MileageTrackerAdapter extends HeaderRecyclerViewAdapter
implements Action1<List<Submission>>, Action1<Summary> {
.
.
.
}
但是,我得到重複的類錯誤。所以我試圖實現一個通用類型:
public class MileageTrackerAdapter extends HeaderRecyclerViewAdapter
implements Action1<Object> {
.
.
.
@Override
public void call(Object o) {
if(o instanceof Summary){
// Logic
} else {
// Logic
}
}
}
但我得到一個運行時錯誤,我無法將摘要映射到提交。即使那樣,我也不確定鑄造通用型是否是解決問題的最佳方法。
基於從dwursteisen反饋:
我改變了我的總結類映射到提交。我還創建了一個名爲「isSummary」的新字段。按照建議將我的觀察值更改爲以下值:
TrackerDbUtils.getListSubmissionObservable(db)
.map(Submission.MAP)
.mergeWith(TrackerDbUtils.getSummaryObservable(db)
.map(Summary.MAP))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mAdapter);
這會創建一個可啓動兩次的Observable;一次是提交的大量列表,另一個是大小爲1的列表。該列表實際上是摘要。在我的適配器:
@Override
public void call(List<Submission> mSubmissions) {
if(mSubmissions.size() == 1 && mSubmissions.get(0).isSummary()){
mSummary = mSubmissions.get(0);
} else {
mArray = new ArrayList<>(mSubmissions);
}
notifyDataSetChanged();
}
你能否併發問題詳細點嗎?我是RxJava的新手,所以我的印象是訂閱多個可觀察對象是RxJava的一大特點。這不是這種情況嗎? – Tykin
您的訂閱者/觀察者的onNext方法可能在同一時間被調用,因爲共享相同訂閱者/觀察者的每個observable可能會在不同的線程上下文中觀察。 – dwursteisen