【问题标题】:Can't return body of http request无法返回 http 请求的正文
【发布时间】:2020-04-19 01:54:31
【问题描述】:

所以我试图返回我在 OnResponse() 中检索到的正文。我可以在调试器中看到主体被检索但没有分配给结果并且 handleHttpRequest() 返回“”?我可以将正文字符串发送到 parseJsonToObject() 的唯一方法是在我不想的 onResponse 女巫中调用它,因为我想将 handleHttpRequest() 用于其他 JSON 请求。我想做的是在handleHttpRequest中返回正文并在doInBackground()中调用parseJsonToObject()。

我的主要问题是为什么不将 body 分配给结果?

内部类 AsyncTaskHandleJson : AsyncTask() {

    override fun doInBackground(vararg url: String?): String? {

        handleHttpRequest()

        return "";
    }

    private fun handleHttpRequest(): String? {
        val url = "https://www.noforeignland.com/home/api/v1/places/";
        val client = OkHttpClient();
        var result: String? = "";
        val request = Request.Builder().url(url).build();

       client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                println(e)
            }
            override fun onResponse(call: Call, response: Response) {
                val body = response?.body?.string();
                result = body;
                parseJsonToObjct(body)

            }
        })

        return result
    }


}

【问题讨论】:

    标签: kotlin okhttp


    【解决方案1】:

    我找到了解决方案。问题是 client.newCall(request).enqueue 是异步的,并且 handleHttpRequest() 在 body 被分配给结果之前返回。我通过使用 client.newCall(request).execute() insted 解决了它。

    fun handleHttpRequest(url : String): String? {
            val client = OkHttpClient();
            var result: String? = "";
            val request = Request.Builder().url(url).build();
    
            val response = client.newCall(request).execute();
            if(response.isSuccessful){
                result = response?.body?.string();
            }else{
                println("HTTP Request FAILED")
            }
            return result
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 2020-08-08
      • 2021-12-04
      • 2014-09-15
      • 2014-08-23
      • 1970-01-01
      • 2017-03-23
      • 2011-12-10
      • 2020-12-12
      相关资源
      最近更新 更多