当前位置: 首页 > 知识库问答 >
问题:

Android从改装调用获取LiveData

柳项明
2023-03-14
 class PaymentService {

        private var paymentMethodList = ArrayList<PaymentMethodModel>()
        private val paymentMethodListLiveData = MutableLiveData<List<PaymentMethodModel>>()

        init {
            paymentMethodListLiveData.value = paymentMethodList
        }

        fun fetchPaymentMethods() {
            val retrofit = Retrofit.Builder()
                .baseUrl(SERVICE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build()

            val service = retrofit.create(PaymentClient::class.java)
            val jsonCall = service.getListOfPaymentMethods()
            jsonCall.enqueue(object : Callback<List<PaymentMethodModel>> {
                override fun onResponse(call: Call<List<PaymentMethodModel>>, response: Response<List<PaymentMethodModel>>) {
                    paymentMethodList = (response.body() as ArrayList<PaymentMethodModel>?)!!
                }

                override fun onFailure(call: Call<List<PaymentMethodModel>>, t: Throwable) {
                    //TODO
                }
            })
        }
goToNextButton.setOnClickListener {

            paymentMethods = PaymentMethodSelectionViewModel().getAllPaymentMethods()
            paymentMethods!!.observe(viewLifecycleOwner, Observer {
                Log.e("", "")
            })
        }

编辑

class PaymentRepository {

    private val paymentService = PaymentService()

    fun getPaymentMethods(): LiveData<List<PaymentMethodModel>> {
        paymentService.fetchPaymentMethods()
        return paymentService.getPaymentMethods()
    }

}


class PaymentMethodSelectionViewModel: ViewModel() {

    private val paymentRepository = PaymentRepository()
    private val paymentMethods = paymentRepository.getPaymentMethods()

    fun getAllPaymentMethods(): LiveData<List<PaymentMethodModel>> {
        paymentRepository.getPaymentMethods()
        return paymentMethods
    }

}

共有1个答案

何骞尧
2023-03-14

请求更改为viewmodel

class PaymentMethodSelectionViewModel: ViewModel() {

    //Data
    var paymentMethodList =  MutableLiveData<List<PaymentMethodModel>>()

    fun getAllPayments(){

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

        val service = retrofit.create(PaymentClient::class.java)
        val jsonCall = service.getListOfPaymentMethods()

        jsonCall.enqueue(object : Callback<List<PaymentMethodModel>> {
            override fun onResponse(call: Call<List<PaymentMethodModel>>, response: Response<List<PaymentMethodModel>>) {

                var data: List<PaymentMethodModel>  = (response.body() as ArrayList<PaymentMethodModel>?)!!

               paymentMethodList.value=data


            }

            override fun onFailure(call: Call<List<PaymentMethodModel>>, t: Throwable) {
                //TODO
            }
        })
    }



}

在您的视图中(活动)使用

//load
paymentMethodSelectionViewModel.getAllPayments();


//Observers
 paymentMethodSelectionViewModel.paymentMethodList.observe(this,
   Observer { list ->
           // your code
       })

我建议您在corutines或RXJAVA2中使用Revovit2,请查看本教程

 类似资料:
  • 我在PartnerController类中创建了下一个savePartner()方法,如下所示: 我还添加了savePartner方法来改进界面: 当我在postman works(代码200)中执行post call时,但我在android-dios中调试了之前的调用,并获得了下一个错误: 响应{协议=超文本传输协议/1.1,代码=400,消息=错误请求, url=https://localho

  • 我使用的是改装版2.0b2。收到响应后,我尝试通过以下方式从响应中获取InputStream: 但是这个应用程序一直在扔: 尽管回复正确。我到底做错了什么?

  • 而我的主要 而且我有 我的json

  • 我有一个正在解析的用户列表。通用域名格式 我需要检索其中一些用户,我有所有必要的ID。例如,parse中存储了50个用户,但我只需要10个。 有了这10个ID,我需要获得用户。 我是邮递员,我做下一件事: 我得到了正确的数据。 如何将其转换为改装呼叫?如何在改装中使用“where”语句? 感谢所有。

  • 问题内容: api调用 返回在其中填充的对象。样本输出: 当我在go中尝试相同的呼叫时,即使我在掩码中声明了该呼叫,也不会填充该呼叫。请指教。 样本输出: 然后返回一个具有与以下相同数据的html字符串,该示例条目: 问题答案: 默认端点是REST,但是在您的环境中,您使用的是xmlrpc,这可能是由于〜/ .softlayer文件的存在,并且在此文件中将其配置为XMLRPC入口。 有关更多信息,

  • 大家好,我是java多线程新手。有人能帮我吗: 我的服务: SpringBoot应用程序: 异步配置: 控制器: 当我点击这个来自邮递员的get请求时,它在响应中显示为空白。我知道我的调用是异步进行的,响应甚至在调用我的方法之前就回来了。有没有办法通过更改邮递员或Spring启动应用程序中的一些设置来查看此响应