LiveData的包装器类

问题描述 投票:1回答:1

我有一个ViewModel类,如下:

class MainViewModel(
    private val schedulerProvider: BaseSchedulerProvider
) : BaseViewModel() {

    private val _posts = MutableLiveData<List<Post>>()
    val posts: LiveData<List<Post>>
        get() = _posts

    private val _isDataLoadingError = MutableLiveData<Boolean>()
    val isDataLoadingError: LiveData<Boolean>
        get() = _isDataLoadingError

    private val _isLoading = MutableLiveData<Boolean>()
    val isLoading: LiveData<Boolean>
        get() = _isLoading

    init {
        showPhotos()
    }

    fun showPhotos() {
        EspressoIdlingResource.increment() // App is busy until further notice
        _isLoading.postValue(true)
        compositeDisposable.add(Network.items.getPhotos()
            .subscribeOn(schedulerProvider.io())
            .observeOn(schedulerProvider.ui())
            .doFinally {
                if (!EspressoIdlingResource.countingIdlingResource.isIdleNow) {
                    EspressoIdlingResource.decrement() // Set app as idle.
                }
                _isLoading.postValue(false)
            }
            .subscribe({
                _isDataLoadingError.postValue(false)
                showPosts(it)
            }) {
                _isDataLoadingError.postValue(true)
                Timber.e(it)
            })
    }

    private fun showPosts(networkPhotos: List<NetworkPhoto>) {
        EspressoIdlingResource.increment() // App is busy until further notice
        _isLoading.postValue(true)
        compositeDisposable.add(Network.items.getPosts()
            .subscribeOn(schedulerProvider.io())
            .observeOn(schedulerProvider.ui())
            .doFinally {
                if (!EspressoIdlingResource.countingIdlingResource.isIdleNow) {
                    EspressoIdlingResource.decrement() // Set app as idle.
                }
                _isLoading.postValue(false)
            }
            .subscribe({ networkPosts ->
                _isDataLoadingError.postValue(false)
                _posts.postValue(
                    PostAndImages(networkPosts, networkPhotos).asDomaineModel()
                )
            }) {
                _isDataLoadingError.postValue(true)
                Timber.e(it)
            })
    }
}

_isDataLoadingError_isLoading创建包装器类更好吗?如果是,您能告诉我如何?

android android-livedata android-viewmodel
1个回答
0
投票

我创建了一个枚举,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.