簡體   English   中英

無法從 android Kotlin ZC1C425268E68385D1AB5ZA7FZ 中的 API GET 請求返回響應

[英]Not able to return the response from an API GET request in a android Kotlin function

我目前正在嘗試在 Kotlin 的 android 工作室中開發 android 應用程序。 我使用 RESTful API 將數據從我的應用程序獲取/發布到 MSSQL 數據庫。

In the android studio, I've made a function that sends a GET request to the API using Volley and returns the response from the API in JsonArray format.

我遇到的問題是響應是空的(/跳過),這導致返回一個空的 JsonArray。

function 如下所示:

1 fun apiGetRequest(context: Context, token: String?, id: String?): JsonArray {
2     val queue = Volley.newRequestQueue(context)
3     val url = "http://**.**.*.**:**/****/****?token=$token&id=$id"
4 
5     var jsonArray = JSONArray()
6 
7     val jsonArrayRequest = JsonArrayRequest(url, { response ->
8         jsonArray = response
9     }, {
10        //Error listener
11    })
12    queue.add(jsonArrayRequest)
13    return jsonArray
14}

此 GET 請求中使用的 URL 工作並在 Postman 中返回所需的 JsonArray。 但是在這個 function 中,響應要么為空,要么被跳過。 在調試模式下,它會完全跳過第 8 行到第 11 行,這會導致返回一個空的 JsonArray。

我還嘗試首先分解單個 JsonObjects 中的響應並將其添加到 JsonArray 中,如下所示:

7 val jsonArrayRequest = JsonArrayRequest(url, { response ->
8         for(i in 0 until response.length()) {
9             val jsonObject =  response.getJSONObject(i)
10            jsonArray.put(jsonObject)
11        }

但是沒有結果。

我感覺 android 工作室中的內置多線程可能是我的問題的原因。 但我不確定。

如果有人知道我的問題的修復或解決方案,我很樂意聽到。 或者,即使是朝着正確的方向推動也是值得贊賞的。

提前致謝。

您不能同步返回結果。 您必須以異步方式進行。 試試這個,我只是稍微修改了你的代碼。

fun apiGetRequest(context: Context, token: String?, id: String?, callback: (result: JSONArray) -> Unit) {
 val queue = Volley.newRequestQueue(context)
     val url = "http://**.**.*.**:**/****/****?token=$token&id=$id"
 
     //var jsonArray = JSONArray()
 
     val jsonArrayRequest = JsonArrayRequest(url, { response ->
         // jsonArray = response
         callback(response)
     }, {
        //Error listener
        callback(null)
    })
    queue.add(jsonArrayRequest)
    
}



Now you can call this method like this...

apiGetRequest(context ,"your token","your id" ) {
   if(it!=null){
      // println(it)
      // do what you want to do with the jsonarray
   }
   else{
      // show some error message to user or whatever.
   }
    
}


通過這種方式,它異步工作。 在 apiGetRequest 方法中,當它調用 queue.add(jsonArrayRequest) 時,它不會等待調用結束。 這就是為什么我們必須使用回調方法,以便當結果准備好時,它可以通過回調將結果傳遞給我們。

callback(response) 和 callback(null) 正在這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM