我开发了一个带mpv(mosby3)+ socket.io的应用程序。 我想使用rxjava 2来关联提供者和存储库。
我有CategoryManager
public class CategoryManager {
private List<Category> list = null;
...
}
如果list not null我可以做到
public Single<List<Category>> getList() {
return Single.just(this.list);
}
但是,如果我需要加载列表,我就像它一样进行异步
socket.on("category", (data) -> {
Type founderListType = new TypeToken<ArrayList<Category>>() {}.getType();
list = gson.fromJson(data[0].toString(), founderListType);
// here i need to generate event to single subscriber
})
我想我应该用
public Single<List<Category>> getList(int count) {
return Single.create(s -> {
if (list == null) {
socket.emit("category");
// i need async load list
} else {
s.onSuccess(list.subList(0, count));
}
});
}
CategoryPresenter应该有像
这样的代码 disposable.add(session.getCategoryManager()
.getList(5)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> {
if (isViewAttached()) {
getView().setData(data);
}
}, throwable -> {
throwable.printStackTrace();
})
);
}
我认为我可以将订阅者保留在类属性中
private List<SingleEmmiter> subscribers;
并删除setCancellable方法中的订阅者,但我认为这不是一个好主意。
请帮帮我:)。