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()

检查这个:https://github.com/mohosyny/simpleMVP

如果您打算使用 RxJava + LiveDate,则无需发明可以重用的东西。

更好的方法是使用 LiveDataReactiveStreams。在这种情况下,您的存储库不需要处理 LiveData。

Flowable<String> flowable = ... ;
LiveData<String> liveData = LiveDataReactiveStreams.fromPublisher(flowable);

主要问题是你是returnLiveData一个结果。您存在于 ViewModel 内部的实时数据不应更改其实例。您只需要更新 MutableLiveData

的值