Я использую модификацию и Rxjava для обработки вызовов API для моего приложения mvvm android. Основываясь на некоторых уроках, в настоящее время я использую RxJava следующим образом.
ViewModel.java
CompositeDisposable disposable = new CompositeDisposable();
private void fetchTodolist(){
loading.setValue(true);
disposable.add(
service.getToDoList("A1833")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<ApiResponse<ArrayList<TodoItem>>>() {
@Override
public void onSuccess(ApiResponse<ArrayList<TodoItem>> value) {
if(value.getStatus() == 200){
//on call success code
} else {
//on call rejected code
}
}
@Override
public void onError(Throwable e) {
// on call error code
}
})
);
}
И теперь я хочу кэшировать результат вызова API при успешном вызове в базу данных комнаты. Поэтому мне нужно использовать другой асинхронный метод и попытаться повторно использовать новый поток, который я создал ранее. И вот код:
private void fetchTodolist(){
loading.setValue(true);
Scheduler a = Schedulers.newThread();
disposable.add(
service.getToDoList("A1833")
.subscribeOn(a)
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<ApiResponse<ArrayList<TodoItem>>>() {
@Override
public void onSuccess(ApiResponse<ArrayList<TodoItem>> value) {
if(value.getStatus() == 200){
a.scheduleDirect(new Runnable() {
@Override
public void run() {
long inserted = dao.insert(value);
}
});
} else {
//on call rejected code
}
}
@Override
public void onError(Throwable e) {
// on call error code
}
})
);
}
Интересно, если это плохая практика и приведет к серьезной проблеме. И если так, какая альтернатива?