我在android studio中用kotlin编写了以下代码以执行同步请求。我改编了this question中的Java代码。我现在有两个问题:
每个请求都会导致出现“ ...的意外响应代码404”消息。当我用邮递员调用URL时,它正在工作。而且它还可以用于异步调用。
该消息会立即记录,但仅在30秒超时后才调用complete(false)函数。我还尝试了一个自定义的ErrorListener,但超时后也将其触发。
有人知道为什么会出现404吗?并且如果由于另一个问题而发生错误,那么最好立即而不是在30秒后调用complete()函数。我该怎么办?
fun loadUserData(context: Context, complete: (Boolean) -> Unit) {
val future: RequestFuture<JSONObject> = RequestFuture.newFuture()
val getUserDataRequest = object: JsonObjectRequest("$URL_GET_USER_DATA/${App.sharedPreferences.userId}", JSONObject(), future, future) {
override fun getHeaders(): MutableMap<String, String> {
val headers = HashMap<String, String>()
headers.put("Authorization", "Bearer ${App.sharedPreferences.authToken}")
return headers
}
}
App.sharedPreferences.requestQueue.add(getUserDataRequest)
try {
val response: JSONObject = future.get(30, TimeUnit.SECONDS)
userName = response.getString("name")
userEmail = response.getString("email")
complete(true)
} catch (e: InterruptedException) {
Log.d("REQUEST", "EXC: " + e.localizedMessage)
complete(false)
} catch (e: ExecutionException) {
Log.d("REQUEST", "EXC: " + e.localizedMessage)
complete(false)
} catch (e: TimeoutException) {
Log.d("REQUEST", "EXC: " + e.localizedMessage)
complete(false)
} catch (e: JSONException) {
Log.d("JSON", "EXC: " + e.localizedMessage)
complete(false)
}
}