Android postValue()不';t调用MutableLiveData上的observe

Android postValue()不';t调用MutableLiveData上的observe,android,android-recyclerview,observer-pattern,mutablelivedata,Android,Android Recyclerview,Observer Pattern,Mutablelivedata,我有一个API,在那里我可以从邮政编码中获得地址列表。这里是我进行API调用的地方,并返回一个MutableLiveData对象,然后尝试观察该对象 fun getAddressFromPostCode(postCode: String): MutableLiveData<List<Address>>{ val trimmedPostCode = postCode.replace("\\s".toRegex(),"").t

我有一个API,在那里我可以从邮政编码中获得地址列表。这里是我进行API调用的地方,并返回一个MutableLiveData对象,然后尝试观察该对象

fun getAddressFromPostCode(postCode: String): MutableLiveData<List<Address>>{

    val trimmedPostCode = postCode.replace("\\s".toRegex(),"").trim()
    val dataBody = JSONObject("""{"postcode":"$trimmedPostCode"}""").toString()
    val hmac = HMAC()
    val hmacResult = hmac.sign(RequestConstants.CSSecretKey, dataBody)

    val postData = PostCodeBodyData()
    postData.postcode = trimmedPostCode
    val body = PostCodeRequestData()
    body.dataSignature = hmacResult
    body.data = postData

    //val myBodyModel = MyBodyModel(data = dataBody, data_signature = hmacResult)
    val url = RequestConstants.CS_BASE_URL

    val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    val api:GetAddressAPIService = retrofit.create(GetAddressAPIService ::class.java)
    val myCall: Call<GetAddressResponse> = api.getPostCodeAddress(body)

    myCall.enqueue(object : Callback<GetAddressResponse> {
        override fun onFailure(call: Call<GetAddressResponse>?, t: Throwable?) {
            Log.d("RegistrationInteractor", "Something went wrong", t)
            Log.d("RegistrationInteractor", call.toString())
        }

        override fun onResponse(call: Call<GetAddressResponse>?, response: Response<GetAddressResponse>?) {
            // Success response
            if(response?.body()?.success == 1){
                addressLiveData.postValue(response!!.body()!!.addresses)
            }else{
                Log.d("", response!!.body()?.serError?.errorDescription)
                addressLiveData.postValue(null)
            }
        }

    })
    return addressLiveData
}
fun getAddressFromPostCode(邮政编码:字符串):可变LiveData{
val trimmedPostCode=postCode.replace(“\\s.toRegex(),”).trim()
val-dataBody=JSONObject(“{”邮政编码“$trimmedPostCode”}”)。toString()
val hmac=hmac()
val hmacResult=hmac.sign(RequestConstants.CSSecretKey,dataBody)
val postData=PostCodeBodyData()
postData.postcode=trimmedPostCode
val body=PostCodeRequestData()
body.dataSignature=hmacResult
body.data=postData
//val myBodyModel=myBodyModel(数据=dataBody,数据签名=hmacResult)
val url=RequestConstants.CS_BASE_url
val改装:改装=改装.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val api:GetAddressAPIService=Reformation.create(GetAddressAPIService::class.java)
val myCall:Call=api.getPostCodeAddress(正文)
排队(对象:回调{
覆盖失效时的乐趣(调用:调用?、t:可丢弃?){
Log.d(“RegistrationInteractor”,“出错了”,t)
Log.d(“RegistrationInteractor”,call.toString())
}
覆盖fun onResponse(调用:调用?,响应:响应?){
//成功响应
if(响应?.body()?.success==1){
addressLiveData.postValue(响应!!.body()!!.addresses)
}否则{
Log.d(“,response!!.body()?.serError?.errorDescription)
addressLiveData.postValue(空)
}
}
})
返回地址livedata
}
然后,我在我的邮政编码片段中倾听:

btn_find_address.setOnClickListener {
        val interactor = RegistrationInteractor()
         addresses = interactor.getAddressFromPostCode(et_register_postcode.text.toString())
        lifecycle.addObserver(interactor)

        addresses.observe( viewLifecycleOwner, Observer {
            @Override
            fun onChanged(newAddresses: List<Address>) {
                //Set UI
                addressList.addAll(newAddresses)
                adapter.notifyDataSetChanged()
            }
        })
    }
btn\u find\u address.setOnClickListener{
val interactitor=RegistrationInteractitor()
addresses=interactor.getAddressFromPostCode(et\u register\u postcode.text.toString())
lifecycle.addObserver(交互器)
地址。观察(viewLifecycleOwner,观察者{
@凌驾
更改后的乐趣(新地址:列表){
//设置用户界面
addressList.addAll(新地址)
adapter.notifyDataSetChanged()
}
})
}

然而,一旦改变就永远不会被调用。为什么会发生这种情况?

您需要像下面这样做

 val interactor = RegistrationInteractor()
        
        interactor.addressLiveData.observe( viewLifecycleOwner, Observer {
            @Override
            fun onChanged(newAddresses: List<Address>) {
                //Set UI
                addressList.addAll(newAddresses)
                adapter.notifyDataSetChanged()
            }
        })
val interactitor=RegistrationInteractitor()
interactor.addressLiveData.observe(viewLifecycleOwner,Observer{
@凌驾
更改后的乐趣(新地址:列表){
//设置用户界面
addressList.addAll(新地址)
adapter.notifyDataSetChanged()
}
})
更新

不要从方法返回
MutableLiveData
对象。只需获取您的
addressLiveData
的直接实例,并使用它来观察