Api 使用 rxJava 调用
Api calls with rxJava
我正在使用 MVVM 架构,所以基本上这就是我的流程 -
获取存储库实例并return到Activity结果-
public MainViewModel() {
moviesRepository = MoviesRepository.getInstance();
}
public LiveData<AllMovies> getAllMovies() {
return moviesRepository.getAllMovies();
}
在我的存储库中 -
private MoviesRepository() {
allMoviesMutableLiveData = new MutableLiveData<>();
getDataFromApi();
}
private void getDataFromApi() {
disposable.add(
ApiService.getMoivesApi().getAllMovies()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<AllMovies>() {
@Override
public void onSuccess(AllMovies allMovies) {
allMoviesMutableLiveData.setValue(allMovies);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
})
);
}
我有 2 个问题:
1)这是我第一次使用rxJava,这是获取响应的正确流程吗?
2)我用的是disposable
清除,如果有问题应该调用onCleared
方法,dispoable.clear()
.
问题是,我的存储库中没有 onCleared
覆盖方法,所以我可以清除它吗?
使用subscribeOn(Schedulers.io())
代替Schedulers.newThread()
并在Activity的onPause()
方法中使用dispoable.clear()
如果您打算使用 RxJava + LiveDate,则无需发明可以重用的东西。
更好的方法是使用 LiveDataReactiveStreams。在这种情况下,您的存储库不需要处理 LiveData。
Flowable<String> flowable = ... ;
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(flowable);
主要问题是你是returnLiveData一个结果。您存在于 ViewModel 内部的实时数据不应更改其实例。您只需要更新 MutableLiveData
的值
我正在使用 MVVM 架构,所以基本上这就是我的流程 -
获取存储库实例并return到Activity结果-
public MainViewModel() {
moviesRepository = MoviesRepository.getInstance();
}
public LiveData<AllMovies> getAllMovies() {
return moviesRepository.getAllMovies();
}
在我的存储库中 -
private MoviesRepository() {
allMoviesMutableLiveData = new MutableLiveData<>();
getDataFromApi();
}
private void getDataFromApi() {
disposable.add(
ApiService.getMoivesApi().getAllMovies()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<AllMovies>() {
@Override
public void onSuccess(AllMovies allMovies) {
allMoviesMutableLiveData.setValue(allMovies);
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
})
);
}
我有 2 个问题:
1)这是我第一次使用rxJava,这是获取响应的正确流程吗?
2)我用的是disposable
清除,如果有问题应该调用onCleared
方法,dispoable.clear()
.
问题是,我的存储库中没有 onCleared
覆盖方法,所以我可以清除它吗?
使用subscribeOn(Schedulers.io())
代替Schedulers.newThread()
并在Activity的onPause()
方法中使用dispoable.clear()
如果您打算使用 RxJava + LiveDate,则无需发明可以重用的东西。
更好的方法是使用 LiveDataReactiveStreams。在这种情况下,您的存储库不需要处理 LiveData。
Flowable<String> flowable = ... ;
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(flowable);
主要问题是你是returnLiveData一个结果。您存在于 ViewModel 内部的实时数据不应更改其实例。您只需要更新 MutableLiveData
的值