2011-07-21 53 views
2

我最近寫了Android的一個簡單的Twitter的應用程序,瞭解Twitter的API和OAuth的繩索。WebView.loadUrl(URL)什麼也不做

應用程序的主要活動簡單地詢問用戶名跟隨。然後它會調用另一個處理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> 

,也是我列入清單正確的Internet的權限。

一個WebViewCoreThread正在運行的應用程序的生命,和WebViewWorkerThread後彈入,但沒有永遠的WebView來了(甚至不是一個白色屏幕)。該應用程序永遠不會阻止。它繼續運行,就好像loadUrl()行被簡單地註釋掉一樣。

我我的手機上測試(Droid的X2),以及一個模擬器,都具有相同的結果。任何幫助將不勝感激。

在此先感謝!

回答

2

它繼續運行,就好像loadUrl()行被簡單地註釋掉一樣。

它將始終「繼續運行,就好像loadUrl()行被簡單地註釋掉一樣」。 loadUrl()是異步的並且不會阻止。

即興,或者:

  • weNeedCredentials()正在恢復false,或
  • follow()替換的UI,或
  • Twitter正在做一個重定向,並且someConditiontrue,所以你做WebViewGONE馬上
  • 存在您正在加載的URL的問題
+0

有什麼辦法同步執行使用loadURL()?在調用follow()之前,WebView必須啓動才能使應用正常工作。 – bmat

+1

@Blake M .:「有沒有辦法同步執行loadUrl()?」 - 沒有。 「WebView必須在呼叫之前啓動才能跟上()以使應用正常運行。」 - 然後在加載頁面之前不要調用follow()。 – CommonsWare

+0

那麼那麼簡單,現在就像是一種魅力。非常感謝! – bmat