【问题标题】:android - kotlin - mvvm - posting data to webserviceandroid - kotlin - mvvm - 将数据发布到网络服务
【发布时间】:2020-02-19 07:56:18
【问题描述】:

我想将一些数据发布到网络服务并获得结果。这是我的代码:

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 按钮,它会创建一个新的观察者,然后返回两个值,第一个值是第一次运行,第二个值是第二次运行

我该如何解决这个问题?提交表格的正确方法是什么?

【问题讨论】:

  • 我认为最好的解决方案是disable第一次提交后的按钮。

标签: android kotlin android-lifecycle android-livedata android-mvvm


【解决方案1】:

如果您的问题是因为LiveData,您应该使用SingleLiveEvent,如下所示

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

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

如果你不知道SingleLiveEvent,你可以找到herehere

如果你的问题是因为你的ui元素,我认为最好的解决方法是第一次提交后disable提交按钮。

【讨论】:

  • 我认为关联链接中的 SingleLiveEvent 已经是 MutableLiveData 或 MediatorLiveData,不需要将其包装到另一个 MutableLiveData imo 中。
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2016-01-01
相关资源
最近更新 更多