首页 > 解决方案 > Android Toast 消息未使用 Fuel 框架显示

问题描述

我正在使用Fuel发送和接收来自 API 的请求。

但是,如果请求不成功,我将无法显示 Toast 消息或 AlertDialogs。

示例代码:

private fun validatePassword(): Boolean {
    var minPasswordLength = 0
    val password = findViewById<EditText>(R.id.input_password_register).text.toString()
    val password_repeat: String = findViewById<EditText>(R.id.input_password_repeat_register).text.toString()


    "/auth/password.json".httpGet().responseString { request, response, result ->
        //do something with response
        request.header(mapOf("Content-Type" to "application/json"))
        Log.println(Log.ASSERT, "password_Curl", request.cUrlString())

        when (result) {
            is Result.Failure -> {
                val data = response.data.toString(Charsets.UTF_8)
                Log.println(Log.ASSERT, "Response_Password_Fail", data)

                val jelement = JsonParser().parse(data)
                val jobject = jelement.asJsonObject

                Toast.makeText(this, jobject.get("Error").asString, Toast.LENGTH_SHORT).show()
            }
            is Result.Success -> {
                val data = response.data.toString(Charsets.UTF_8)
                Log.println(Log.ASSERT, "Response_Passwd_Succes", data)

                val jelement = JsonParser().parse(data)
                val jobject = jelement.asJsonObject

                minPasswordLength = jobject.get("minimal_length").asInt
            }
        }
    }
    return password.length >= minPasswordLength && password.equals(password_repeat)
}

我尝试使用以下命令在 UIThread 上运行 makeText 命令:

runOnUiThread{Toast.makeText(this, jobject.get("Error").asString, Toast.LENGTH_SHORT).show()}

这也不起作用。

但是,我在调试时确实得到了代码: dubug_screenshot

谢谢您的帮助!干杯。

更新: 在调试时,我注意到 minPasswordLength 保持为 0,即使API 中的“minimal_length”值为 8。所以可能是线程问题?

标签: androidkotlinhttpresponseandroid-toast

解决方案


在(文件)中使用implementation 'com.github.kittinunf.fuel:fuel-android:1.15.0而不是。implementation 'com.github.kittinunf.fuel:fuel:1.15.0'dependenciesbuild.gradle

库的 JVM 实现不会自动调用 UI 线程中的处理程序。


即使在 JVM 实现中,这也适用于我: runOnUiThread { Toast.makeText(this, "Some text", Toast.LENGTH_SHORT).show() }

我认为它对您不起作用,因为 JSON 不包含"Error"but"details"字段。


推荐阅读