Как я могу наблюдать 4 `LiveData`, чтобы сделать сетевой запрос

Во многих учебниках он имеет один LiveData (например, userId).

private MutableLiveData<String> userId = new MutableLiveData<>();
LiveData<Resource<List<User>>> books = Transformations.switchMap(userId, id -> repository.getAllBook(id));

К сожалению для меня, мне нужно 4 LiveData(например, userEmail, passowrd, authKey и так далее...), чтобы сделать сетевой запрос. Transformation.swithMap принять только один LiveData как param.

Как я могу решить эту ситуацию? Спасибо!


person amlwin    schedule 29.07.2018    source источник
comment
stackoverflow.com/questions/49493772 /   -  person Raghunandan    schedule 29.07.2018


Ответы (1)


После того, как я найду много. Я нашел рекомендуемый способ использования в приложении Google I/O . SwapReservationViewModel.kt

var userId: String? = null

    var fromId: String? = null

    var fromTitle: String? = null

    var toId: String? = null

    var toTitle: String? = null

    //clear some stuff.....  

override fun onSwapClicked() {
        _dismissDialogAction.value = Event(true)

        val immutableUserId = userId
        val immutableFromId = fromId
        val immutableFromTitle = fromTitle
        val immutableToId = toId
        val immutableToTitle = toId
        // The user should be logged in at this point.
        if (immutableUserId == null || immutableFromId == null ||
            immutableFromTitle == null || immutableToId == null || immutableToTitle == null
        ) {
            Timber.e("Tried to replace reservations with a null user or IDs")
            return
        }
        swapActionUseCase.execute(
            SwapRequestParameters(
                immutableUserId,
                immutableFromId,
                immutableFromTitle,
                immutableToId,
                immutableToTitle
            )
        )
    }

на этих фрагментах. onSwapClicked() нужно 4 переменные, чтобы выполнить действие. поэтому они окружают if и ждут переменные, которые не равны нулю.

person amlwin    schedule 05.09.2018