首页 > 解决方案 > android - kotlin - mvvm - 将数据发布到网络服务

问题描述

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

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

我怎样才能解决这个问题 ?提交表格的正确方法是什么?

标签: androidkotlinandroid-lifecycleandroid-livedataandroid-mvvm

解决方案


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

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

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

如果你不知道SingleLiveEvent,你可以在这里这里找到。

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


推荐阅读