有没有办法访问 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()
}
}
}
你有三种方法:
创建 class 字段如 var json = JsonObject()
并在需要时设置它。
将它像字符串一样发送到另一个 activity 并将其转换为 JsonObject:
val answer = JSONObject(string_from_intent)
如果您最终将此 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
}
我正在使用 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()
}
}
}
你有三种方法:
创建 class 字段如
var json = JsonObject()
并在需要时设置它。将它像字符串一样发送到另一个 activity 并将其转换为 JsonObject:
val answer = JSONObject(string_from_intent)
如果您最终将此 jsonobject 转换为模型 class 您可以通过 intent parcelable 模型 class 发送到另一个 activity.
google 的最佳实践:
实施您的案例的最佳方法是使用 LiveData。
当您的 api 调用完成后,您需要使用
更新您的 liveDataliveData.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
}