与Kotlin中的截击同步请求

时间:2019-05-13 18:30:19

标签: android kotlin request android-volley synchronous

我在android studio中用kotlin编写了以下代码以执行同步请求。我改编了this question中的Java代码。我现在有两个问题:

  1. 每个请求都会导致出现“ ...的意外响应代码404”消息。当我用邮递员调用URL时,它正在工作。而且它还可以用于异步调用。

  2. 该消息会立即记录,但仅在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)
    }
}

0 个答案:

没有答案