处理Asynctask中的URL重定向

时间:2012-11-25 21:41:27

标签: android android-asynctask android-webview

在我的应用程序中,我加载了一个webview(登录表单),它将我重定向到实际的登录表单,然后我将在同一webview中显示。这个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");
            }
       }

    }
}

0 个答案:

没有答案