Сообщения Android Toast не отображаются с использованием Fuel Framework - PullRequest
0 голосов
/ 25 августа 2018

Я использую 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)
}

Я попытался запустить команду makeText на UIThread, используя:

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

Это тоже не сработало.

Однако я получаю код во время отладки: dubug_screenshot

Спасибо за помощь!Приветствия.

ОБНОВЛЕНИЕ: Во время отладки я заметил, что minPasswordLength остается 0, хотя "minimal_length" из API имеет значение 8. Так что, возможно, это проблема Threading

1 Ответ

0 голосов
/ 26 августа 2018

Используйте implementation 'com.github.kittinunf.fuel:fuel-android:1.15.0 вместо implementation 'com.github.kittinunf.fuel:fuel:1.15.0' в dependencies (build.gradle файл).

Реализация библиотеки JVM не вызывает автоматически обработчики в потоке пользовательского интерфейса.


Это работает для меня даже в реализации JVM: runOnUiThread { Toast.makeText(this, "Some text", Toast.LENGTH_SHORT).show() }

Я думаю, что это не сработало для вас, потому что JSON не содержит поле "Error", но "details".

...