-2

私の Android アプリでは、AppAuthを使用して OpenID 接続エンドポイントでユーザーを認証しているため、一連の非同期呼び出しを行っており、最後の呼び出しが返されたときに、okhttp を使用して最終結果を取得しています。アクティビティの UI に表示するには、次のようにします。

authService.performTokenRequest(
    authResponse.createTokenExchangeRequest()
) { tokenResponse: TokenResponse?, tokenException: AuthorizationException? ->
    if (tokenResponse != null) {                         
        authState.performActionWithFreshTokens(authService) { accessToken, _, ex ->
            if (accessToken != null) {
                val url = ...
                val request = ...
                http.newCall(request).enqueue(object: Callback {
                    override fun onFailure(call: Call?, e: IOException?) {...}
                    override fun onResponse(call: Call?, response: Response?) {
                        if (response != null) {
                            this@MainActivity.runOnUiThread {
                                textView.text = response.body()!!.string()
                            }
                        }
                    }
                })
            }
        }
    }
}

しかし、テキストビューを更新しようとすると、次の例外が発生します。

android.os.NetworkOnMainThreadException

を削除しようとするとrunOnUiThread、「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます」という別の例外が発生します。

理解できません。私は何をすべきか?

4

1 に答える 1