【问题标题】:Android Toast Messages are not shown using Fuel FrameworkAndroid Toast 消息未使用 Fuel 框架显示
【发布时间】:2019-01-31 18:10:53
【问题描述】:

我正在使用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()}

这也不起作用。

不过,我在调试时确实得到了代码:

感谢您的帮助!干杯。

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

【问题讨论】:

  • toast方法是否被调用,你从debug中检查吗
  • 是的,如果我调试到 Toast 行的代码,但是它不会显示
  • 您确定没有显示Toast 吗?也许它是空的。您是否尝试过在那里对消息进行硬编码,例如Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show()JsonParser 来自哪个库?
  • @WojciechJanuszek 我试过了,是的,没用;上面的屏幕截图处于调试模式,它不是空的,因此绿色的注释是实时值。 JsonParser 来自 GSON

标签: android kotlin httpresponse android-toast


【解决方案1】:

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

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


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

我认为它不适合你,因为 JSON 不包含 "Error" 而是 "details" 字段。

【讨论】:

  • 谢谢!将依赖项更改为 com.github.kittinunf.fuel:fuel-android:1.15.0 对我有用
猜你喜欢
  • 2011-12-09
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2020-07-30
  • 1970-01-01
相关资源
最近更新 更多