私はコトリンを使ってAndroid開発を始めようとしています。私がしようとしていることの一部は、ログインアクティビティからHTTP要求を送信し、応答から適切な処置をとることです。私はFuelを使っています。これは正常に動作します早速返されたコトリンの楽しみ
private fun disableInput() {
username_input.isEnabled = false
password_input.isEnabled = false
sign_in_button.isEnabled = false
login_progress.visibility = View.VISIBLE
}
:「サインイン」ボタンをタップする
、私は次のようfun
を呼んでいます。私はその後、私のHTTPリクエストを行います。
"http://my.login.url.com".httpPost()
.header("Content-Type" to "application/json")
.body(json, Charsets.UTF_8)
.response(AuthorizationSuccess.Deserializer()) { _, response, result ->
val (auth, error) = result
if (error != null || auth == null) {
Snackbar.make(view, "Error", 0).show()
enableInput()
} else {
// Handle the response
}
}
問題は、私はエラーを受信したとき、私はUIを再度有効にするように見えることができないということです。 Snack
が表示され、enableInput
が呼び出されます。
private fun enableInput() {
username_input.isEnabled = true
password_input.isEnabled = true
sign_in_button.isEnabled = true
login_progress.visibility = View.GONE
}
しかし、それは最初の行のみ(username_input.isEnabled = true
)をヒットし、それ以上になりません。私は割り当てが成功していることを知っているので、ユーザー名の入力を有効にしますが、UIの残りの部分を有効にする理由がわからないことがわかりません。
私はそれが非同期操作から呼び出されているということとは関係がありますが、私はそれを行う他の方法を見つけることができませんでした。
enableInput
と呼ぶべき特別な方法はありますか、これについては完全に間違った方法ですか?
UIコンポーネントを変更するには、おそらくUIスレッドに変更する必要があります。 [view.post()](https://developer.android.com/reference/android/view/View.html#post(java.lang.Runnable)) – Renato
ちょっとした詳細:snakeCase Kotlinコードで 'username_input'ではなく' usernameInput'など)。 – Renato
@レナートそう、ありがとう!あなたが答えを加えると、私はそれを受け入れられたものとしてマークします。そして、チップのおかげで!これはまだ私にとって全く新しいものです。 –