首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有得到mutableLivedata安卓系统的回调吗?

没有得到mutableLivedata安卓系统的回调吗?
EN

Stack Overflow用户
提问于 2020-06-08 08:41:13
回答 2查看 78关注 0票数 0

在我的视图模型中,我有两个api调用,它返回相同的对象。然而,我创建了两个不同的MutableLiveData对象,但是我无法观察第二个对象。

这是我的代码片段

代码语言:javascript
复制
private fun initObservables() {
    holidayViewModel.progressDialog?.observe(this, Observer {
        if (it!!) customeProgressDialog?.show() else customeProgressDialog?.dismiss()
    })
    holidayViewModel.apiResponse?.observe(
        viewLifecycleOwner,
        androidx.lifecycle.Observer { response ->
            if (response.dataList != null) {
                response.dataList!!.removeAt(0)
                if (requireArguments().getString("file_type")
                        .equals(NetworkConstant.FILE_TYPE_LOH, ignoreCase = true)
                ) {
                    val data = Data()
                    data.CountryId = "0"
                    data.CountryName = "Main organisation"
                    response.dataList!!.add(0, data)
                }
                val holidayAdapter = CountryAdapter(response.dataList)
                binding.holiday.adapter = holidayAdapter
                holidayAdapter.notifyDataSetChanged()
                holidayAdapter.setListener(this)
            }
        })

    holidayViewModel.pdfLink?.observe(
        viewLifecycleOwner,
        androidx.lifecycle.Observer { response ->
            utils.openPdf(response.dataList!!.get(0)?.filePath)
        })
}

这是viewmodel类。

代码语言:javascript
复制
class HolidayViewModel(networkCall: NetworkCall) : ViewModel() {
var progressDialog: SingleLiveEvent<Boolean>? = null
var apiResponse: MutableLiveData<ApiResponse>? = null
var pdfLink: MutableLiveData<ApiResponse>? = null
var networkCall: NetworkCall;

init {
    progressDialog = SingleLiveEvent<Boolean>()
    apiResponse = MutableLiveData<ApiResponse>()
    this.networkCall = networkCall
}

fun countries(username: String?, userId: String?) {
    progressDialog?.value = true
    val apiPost = ApiPost()
    apiPost.userName = username
    apiPost.UserId = userId
    networkCall.getCountries(apiPost).enqueue(object : Callback<ApiResponse?> {
        override fun onResponse(
            call: Call<ApiResponse?>,
            response: Response<ApiResponse?>
        ) {
            progressDialog?.value = false
            apiResponse?.value = response.body()
        }

        override fun onFailure(
            call: Call<ApiResponse?>,
            t: Throwable
        ) {
            progressDialog?.value = false
        }
    })
}


fun fetchPdf(
    username: String?,
    password: String?,
    userId: String?,
    countryId: String?,
    fileType: String?
) {
    progressDialog?.value = true
    val apiPost = ApiPost()
    apiPost.userName = username
    apiPost.password = password
    apiPost.UserId = userId
    apiPost.CountryId = countryId
    apiPost.FileType = fileType
    networkCall.getPDF(apiPost).enqueue(object : Callback<ApiResponse?> {
        override fun onResponse(
            call: Call<ApiResponse?>,
            response: Response<ApiResponse?>
        ) {
            progressDialog?.value = false
            pdfLink?.value = response.body()
        }

        override fun onFailure(
            call: Call<ApiResponse?>,
            t: Throwable
        ) {
            progressDialog?.value = false
        }
    })
   }


 }

我试图观察pdfLink对象,但是API被调用了,但是我从未在这个对象的片段中获得回调。

这里怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-08 08:55:33

问题是pdfLink在viewModel中总是空的。

您已经声明了var pdfLink: MutableLiveData<ApiResponse>? = null,但尚未初始化。而且,由于使用?检查它是空的,所以它不会引发异常。

试试这个:

代码语言:javascript
复制
init {
    progressDialog = SingleLiveEvent<Boolean>()
    apiResponse = MutableLiveData<ApiResponse>()
    pdfLink = MutableLiveData<ApiResponse>() // Add this line inside init
    this.networkCall = networkCall
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-08 08:54:33

一个愚蠢的错误忘了初始化它

代码语言:javascript
复制
pdfLink = MutableLiveData<ApiResponse>()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62258174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档