Я написал следующий код с kotlin в Android Studio для выполнения синхронного запроса. Я адаптировал код Java из этого вопроса . У меня сейчас две проблемы:
Каждый запрос приводит к сообщению «Неожиданный код ответа 404 для ...». Когда я звоню URL с почтальоном, это работает. И это также работает с асинхронным вызовом.
Сообщение регистрируется мгновенно, но полная (ложная) функция вызывается только после 30-секундного тайм-аута. Я также попробовал пользовательский ErrorListener, но он также был запущен после тайм-аута.
У кого-нибудь есть идея, почему появляется 404? И в случае возникновения ошибки из-за другой проблемы было бы хорошо, если бы функция complete () вызывалась мгновенно, а не через 30 секунд. Как я могу это сделать?
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)
}
}