我正在嘗試使用 AsyncTask 在 Android Studio 上創建一個簡單的 GET 請求,如下面的代碼片段所示。除錯時,我注意到當我執行 url.openConnection() 時,HttpURLConnection 的 responseCode 為 -1。我已經到處查看問題是什么,但我仍然無法弄清楚。當我在 Visual Studio 上嘗試 GET 請求時,我能夠正確獲得回應。
這是我的 AsyncTask 的主要代碼:
override fun doInBackground(vararg params: Any): String {
var result: String
var connection: HttpURLConnection? = null
try {
val url = URL(myMockURLstring)
connection = url.openConnection() as HttpURLConnection // *** messes up here ***
connection.doOutput = true
connection.doInput = true
connection.instanceFollowRedirects = false
connection.requestMethod = "GET"
connection.setRequestProperty("Content-Type", "application/json")
connection.setRequestProperty("charset", "utf-8")
connection.setRequestProperty("Accept", "application/json")
connection.useCaches = false
val httpResult: Int = connection.responseCode // Gets the status code from an HTTP response message.
if (httpResult == HttpURLConnection.HTTP_OK) {
//inputstreamreader code
} else {
result = connection.responseMessage
}
} catch (e: SocketTimeoutException) {
result = "Connection Timeout"
} catch (e: Exception) {
result = "Error : " e.message
} finally {
connection?.disconnect()
}
return result
}
我的清單檔案中還有以下兩行:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
知道我應該添加或更改什么以使其在 Android Studio 上運行嗎?
編輯:更改為 GET
uj5u.com熱心網友回復:
您是否嘗試過這樣宣告連接?
val url = URL(myMockURLstring)
val connection = url.openConnection() as HttpURLConnection
然后你可以在開始做任何其他事情之前測驗這個 URL 的回傳:
if (connection.responseCode == HttpURLConnection.HTTP_OK) {
try {
// DO YOUR STUFF HERE
} catch (e: Exception) {
e.printStackTrace()
} finally {
connection.disconnect()
}
} else {
println("ERROR ${connection.responseCode}")
}
嘗試設定你的connection.doOutput = false,就像@blackapps 說的那樣。
此外,使用Kotlin Coroutines可能是更好的選擇,這是一種處理異步任務的更現代的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511613.html
