0

私のアプリでは、Web ビュー (ログイン フォーム) をロードして、実際のログイン フォームにリダイレクトし、同じ Web ビューに表示します。この webview は、私の onCreateView から次のように呼び出されます。

new FetchLoginFormTask().execute();

ただし、断続的に android.os.NetworkOnMainThreadException に気付いているため、webView.loadUrl() メソッドが原因であると思われます。これを常に再現できないため、onPostExecute() 内で Asynctask を作成しましたが、logcat で、別の asynctask 内から webview を呼び出すことができないことに気付きました。ログイン フォームが ANR なしで確実に読み込まれるようにするには、どのようなオプションがありますか? または、欠けているベスト プラクティスは何ですか?

private class FetchLoginFormTask extends AsyncTask<String, Integer, Response> {

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected Response doInBackground(String... params) {

        int paramLen = params.length;
        Response result = MyOAuth.fetchLoginForm();
        return result;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
    }

    @Override
    protected void onPostExecute(Response result) {

        if (result != null) {
            //in case of redirect
            if (result.getCode() == 302) {
                Log.i(TAG, "Response was redirect: " + result.getCode());
                //TODO: isn't this a network operation on main UI thread?
                webView.loadUrl(result.getHeader("Location"));
            } else {
                String html = result.getBody();
                webView.loadData(html, "text/html", "UTF-8");
            }
       }

    }
}
4

0 に答える 0