1

我想從我的AsyncTask開始WebView,但似乎無法運行。這是我的onPostExecute方法是什麼樣子:無法從AsyncTask啓動WebView

public class Viewer extends AsyncTask<URI, Integer, URI> { 

     private Activity objContext = null; 

     public Viewer(Activity objContext) { 
     this.objContext = objContext; 
     } 

     protected void onPostExecute(URI uriWebpage) { 
      WebView wbvBrowser = new WebView(this.objContext); 
      wbvBrowser.getSettings().setBuiltInZoomControls(true); 
      wbvBrowser.getSettings().setJavaScriptEnabled(true); 
      wbvBrowser.loadUrl(uriWebpage.toString()); 
     } 

    } 

我的任務就是在我的應用程序使用的兩種活動,因此我的全球objContext變量是Activity類型。如果我將我的objContext變量的類型更改爲調用類的名稱,它的工作正常,但我無法從其他調用類實例化我的任務。我像這樣實例化我的任務。

Viewer mytask = new Viewer(this); 

我該如何解決這個問題?

+0

它似乎像objContext = null或objContext沒有有效的活動引用...你必須提供適當的活動參考。 –

+0

這不是我會得到一個NullPointerException。 –

回答

0

我已經解決了這個問題。它與使用ActivityContext無關。兩者都很好。某些網址似乎並未加載WebView。我將WebView的網址更改爲指向Google之類的網站,並且工作得很好。似乎網址不正確,WebView不會引發異常,但也不會打開。

+0

我認爲你應該創建一個webviewclient並負責shouldOverrideUrlLoading,你也可以使用onPageStarted和onPageFinished –

-2

我不知道爲什麼會發生這種情況,但爲什麼不通過onPostExecute(Uri uriWebpage)中的Intent啓動內置的Web瀏覽器?

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(uriWebPage); 
startActivity(intent); 

如果此解決方案不能滿足您,請發佈LogCat中的錯誤堆棧跟蹤。

+0

因爲我需要通過一些會話Cookie。 :( –

+0

如果你不確定你的答案,@Adam,那麼不要發佈它。問題是WebView中的方法無法在AsyncTask中執行。 –

1

您是否從setContentView從原始佈局到webView或者您有一個容器來放置webview?否則我不認爲webView用戶界面出現。

+0

我剛剛注意到了這一點。 'WebView.loadUrl'它打開一個新的瀏覽器窗口 –

0

你確定你執行你的AsyncTask

    @Override 
      protected void onPostExecute(Void result){    


      } 
     }.execute(); 

還需要類名

Viewer mytask = new Viewer(YourclassName.this); 

//或者這可以幫助您

 private Context mcontext; 

      public Viewer(Context objContext) { 
      this.mcontext= objContext; 
      } 

    protected void onPostExecute(URI uriWebpage) { 
      WebView wbvBrowser = new WebView(((Activity)(mcontext))); 

     } 
+0

我想用上下文更改你的構造函數,然後再試一次 –