WebView.loadUrl(url)什么都不做

时间:2011-07-21 03:50:50

标签: android webview thread-safety

我最近为Android编写了一个简单的Twitter应用程序来学习Twitter API和OAuth的绳索。

应用程序的主要活动只是要求输入用户名。然后它调用另一个处理OAuth&的活动。 Twitter API调用。它将用户重定向到授权页面,然后在用户完成后返回到应用程序。

它曾经工作得很好,但现在由于某种原因,当我调用webview.loadUrl(authorizationURL)时,没有发生。我从来没有改变任何会影响WebView的东西,但是......这是我的代码:

@Override
public void onResume() {
    super.onResume();
    try {

        if(weNeedCredentials()) {
            obtainCredentials();
        }

        follow(mUsername);

    } catch (OAuthException oae) {
        // omitted
    }
}


private boolean weNeedCredentials() {
    // assume the method returns true
}


private void obtainCredentials() {
    final Token requestToken = mOauthService.getRequestToken();
    String authUrl = mOauthService.getAuthorizationUrl(requestToken);
    // I verified that authUrl is the correct url (and != null)

    final WebView oauthView = (WebView) findViewById(R.id.oauthview);

    oauthView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(someCondition) {
                oauthView.setVisibility(View.GONE);

                doOtherStuff();

                return true;
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    });

    oauthView.getSettings().setJavaScriptEnabled(true);
    oauthView.loadUrl(authUrl);

}

这是我的布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <WebView 
        android:id="@+id/oauthview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

</LinearLayout>

我还在Manifest中包含了正确的Internet权限。

WebViewCoreThread在应用程序的生命周期中运行,稍后会弹出WebViewWorkerThread,但是没有WebView出现(甚至不是白屏)。该应用程序永远不会阻止。它继续运行,就像loadUrl()行被简单地注释掉一样。

我已经在我的手机(Droid X2)和模拟器上进行了测试,结果相同。任何帮助将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

它继续运行,就像loadUrl()行被简单地注释掉一样。

它将始终“继续运行,就像loadUrl()行被简单地注释掉一样”。 loadUrl()是异步的,不会阻止。

关闭袖口:

  • weNeedCredentials()正在返回false
  • follow()正在替换用户界面,或
  • Twitter正在进行重定向,someConditiontrue,因此您可以立即WebView成为GONE
  • 您正在加载的网址存在问题