android - kotlin - mvvm - размещение данных в веб-сервисе - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу опубликовать некоторые данные в веб-сервис и получить результат. это мой код:

fab.setOnClickListener {
 viewModel.newBimeGozar(name)
                    .observe(this@BimeGozarAct, Observer {
                        dialogbimegozarNew?.hidePg()
                    })
}

это моя модель представления:

class BimeNewViewModel:ViewModel() {
private val repository=BimeNewRepository()

fun newBimeGozar(name: String): MutableLiveData<StatModel> {
    return repository.newBimeGozar(name)
}

это мой репозиторий:

fun newBimeShode(
    name: String
): MutableLiveData<StatModel> {
    scope.launch {
        val request = api.newBimeShode(name)
        withContext(Dispatchers.Main) {
            try {
                val response = request.await()
                regBimeshodeLiveData.value = response
            } catch (e: HttpException) {
                Log.v("this", e.message);
            } catch (e: Throwable) {
                Log.v("this", e.message);
            }
        }
    }
    return regBimeshodeLiveData;
}

работает нормально, но есть проблема , Я думаю, что наблюдатель продолжает работать, и если ответ результата является ошибкой, и пользователь снова нажимает кнопку fab, он создает нового наблюдателя, и после этого он возвращает два значения, первое значение - первый запуск, а второе значение - второй запуск.

как я могу это исправить? Какой правильный способ подачи форм?

1 Ответ

1 голос
/ 19 февраля 2020

Если ваша проблема из-за LiveData, вы должны использовать SingleLiveEvent, как указано ниже

// For first article
val _liveData = MutableLiveData<Event<StatModel>>()

// For second article
val _liveData = SingleLiveEvent<StatModel>()

Если вы не знаете SingleLiveEvent, вы можете найти его здесь и здесь .

Если ваша проблема связана с вашим элементом пользовательского интерфейса, я думаю, что лучшим решением будет disable кнопка отправки после отправки в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...