有没有办法访问 JsonObjectRequest 之外的响应?

Is there a way to access response outside of the JsonObjectRequest?

我正在使用 Volley 创建一个名为 jsonRequest 的 JsonObjectRequest。我想访问 jsonRequest 之外的响应,以便将其发送到其他活动。如果我执行 val jsonResult = response 并尝试在 intent.putExtra("response", jsonResult) 中访问它,我会收到“未解决的引用”错误。我该怎么做?我的代码如下:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val itemsURL = "https://prices.csgotrader.app/latest/prices_v6.json"
        val requestQ = Volley.newRequestQueue(this@MainActivity)

        val jsonRequest = JsonObjectRequest(
            Request.Method.GET, itemsURL, null,
            { response ->
                TODO() // JsonResult
            },
            { error ->
                val dialogBuilder = AlertDialog.Builder(this)
                dialogBuilder.setTitle("Error")
                dialogBuilder.setMessage(error.message)
                dialogBuilder.create().show()
            })
        requestQ.add(jsonRequest)

        main_activity_btnSearch.setOnClickListener {
            val intent = Intent(this, SearchActivity::class.java)
            intent.putExtra("response", jsonResult)
            startActivity(intent)
        }

        main_activity_btnPortfolio.setOnClickListener {
            TODO()
        }

        main_activity_btnTrending.setOnClickListener {
            TODO()
        }
    }
}

你有三种方法:

  1. 创建 class 字段如 var json = JsonObject() 并在需要时设置它。

  2. 将它像字符串一样发送到另一个 activity 并将其转换为 JsonObject:

    val answer = JSONObject(string_from_intent)
    
  3. 如果您最终将此 jsonobject 转换为模型 class 您可以通过 intent parcelable 模型 class 发送到另一个 activity.

google 的最佳实践:

实施您的案例的最佳方法是使用 LiveData

当您的 api 调用完成后,您需要使用

更新您的 liveData
liveData.postValue("your response data")

您可以从您的 activity 观察 liveData,使用此方法您可以在运行时将您的 api 响应提取到 activity。

YourApiClass.livedata.observe(viewLifecycleOwner) {
       // Here you can update your UI with the live data coming from api
   }

查看详情Android App Architecture