【发布时间】: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