Android 在OnViewCreated变量中指定函数值

Android 在OnViewCreated变量中指定函数值,android,android-studio,kotlin,Android,Android Studio,Kotlin,我试图从函数中获取JSON值,并试图在onViewCreated方法中分配该值。代码运行良好,但我不确定如何在onViewCreated变量中赋值。感谢您的帮助 主要活动 var volleyRequest: RequestQueue?=null val testlLink="https://www.abc.app" override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCre

我试图从函数中获取JSON值,并试图在onViewCreated方法中分配该值。代码运行良好,但我不确定如何在onViewCreated变量中赋值。感谢您的帮助

主要活动

var volleyRequest: RequestQueue?=null
val testlLink="https://www.abc.app"     
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
{
super.onViewCreated(view, savedInstanceState)
volleyRequest=Volley.newRequestQueue(this.context)
getTestData(testlLink)
val data=??????????????????
}
功能

fun getTestData(Url:String)
{

    val testRequest = StringRequest(Request.Method.GET, Url, Response.Listener {
        response: String ->
        try {
    Log.d("Response:",response)
        }catch (e: JSONException) { e.printStackTrace()}

    },
            Response.ErrorListener {
                error: VolleyError? ->
                try {
                    Log.d("Error:", error.toString())

                }catch (e: JSONException){e.printStackTrace()}
            })
    volleyRequest!!.add(testRequest)
}

您不能将请求的结果分配给变量,因为它是异步执行的。您有几个选项,比如或,但一个简单的解决方案是只传递回调函数,这些函数将在响应到达后执行

示例

lateinit var requestQueue: RequestQueue

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

    requestQueue = Volley.newRequestQueue(this)

    getTestData("https://jsonplaceholder.typicode.com/todos/1",
        { body -> Log.d("Network", "Success: $body") },
        { error -> Log.d("Network", "Error", error) }
    )
}

override fun onDestroy() {
    super.onDestroy()
    requestQueue.cancelAll { true }
}

private fun getTestData(url: String, onSuccess: (String) -> Unit, onError: (Throwable) -> Unit) {
    val testRequest =  StringRequest(Request.Method.GET, url,
        Response.Listener { onSuccess(it) },
        Response.ErrorListener { onError(it)}
    )
    requestQueue.add(testRequest)
}
输出

D/Network: Success: {
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

感谢@Omar Mainegra的回复。我可以带回数据,但我的活动中没有可见的数据,日志猫中也没有错误。你能再解释两个问题吗。1) 如何在getData函数下面获得body值,比如var a=body 2)现在我得到的JSON值是[{“school”:“1”,“student”:“20”}],之前我得到的是[{“school\”:“1\”,““student\”:“20\”}]@JoshvaJo关于JSON,
onSuccess
可以是任何你想要的,可以说
{body->data=body}
,关于JSON,看起来是一样的,只要把它转换成你需要的任何东西。我问的是这样的问题。getTestData(“,{body->Log.d(“网络”,“成功:$body”)},{error->Log.d(“网络”,“错误”,错误)})var a=bodyNope,你不能这样做,你需要在回调中做,
getTestData(“jsonplaceholder.tyicode.com/todos/1”,{body->data=body},{error->Log.d(“网络”,“错误”,错误)}