2009-10-13 87 views
7

我的Activity內有一些WebView小部件。我使用loadData()來設置內容,並且這個html包含一個鏈接。我的一些WebViews工作正常,當我單擊鏈接時,Web瀏覽器在新窗口中啓動,但有一些會在我點擊鏈接時使應用程序崩潰。單擊鏈接時Android WebView崩潰

10-13 08:45:24.257: ERROR/AndroidRuntime(751): Uncaught handler: thread main exiting due to uncaught exception 
10-13 08:45:24.308: ERROR/AndroidRuntime(751): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.app.ApplicationContext.startActivity(ApplicationContext.java:627) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:236) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:185) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:277) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.os.Looper.loop(Looper.java:123) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at dalvik.system.NativeStart.main(Native Method) 

似乎有與IntentWebView火災時,我點擊的網址有問題,但我沒有這個Intent的控制,我想。

有沒有人有什麼想法?

我用這個AsyncTask設置在WebView的內容,並能正常工作:

public class SetAdTask extends AsyncTask<Void, Void, String>{ 

    private Main main; 
    private WebView webView; 

    public SetAdTask(Main main, WebView webView){ 
     this.main = main; 
     this.webView = webView; 
    } 

    protected void onPreExecute() { 
     Main.Log("onPreExecute()");     
    } 

    protected String doInBackground(Void... params) { 
     Main.Log("doInBackground()");     
     return main.getRestClient().getAdCode(); 
    } 

    protected void onPostExecute(String result) { 
     Main.Log("onPostExecute()"); 

     String html = "<html><head><title>ad</title></head><body>"; 
     html += "<div style=\"color:grey;font-size:12px;\">ADVERTISEMENT<br/>"; 
     html += result; 
     html += "</body></html>"; 
     webView.loadData(html, "text/html", "latin-1"); 
    } 

} 
+0

哦,我發現了問題..我已經啓動了與錯誤的上下文的webView ...我用viewView =新的WebView(main.getApplicationContext())...似乎webview呈現OK,與此上下文,但不能正確處理意圖... T – 2009-10-13 09:16:27

+1

你可以回答你自己的問題,你知道的。 – 2009-10-13 19:27:16

回答

27

是我webview用錯誤的上下文被初始化...

我使用的問題:

WebView w = new WebView(this.getApplicationContext())

它崩潰...

正確contextactivity本身

WebView w = new WebView(this)

+0

+1我有完全相同的問題,這解決了它,謝謝! – 2011-08-16 02:39:40

+0

這樣做,非常感謝!雖然這個問題只出現在某些設備上。哦,現在它適用於所有人。 – Tom 2012-06-15 17:24:18

+0

我有同樣的問題,但在ListView項中有可點擊的鏈接。這固定了它;謝謝! – jokeefe 2013-12-22 19:05:16

9

如果你不想使用活動作爲背景,另一個(奇怪)解決這個問題是設置爲空WebViewClientWebView

webView.setWebViewClient(new WebViewClient()); 

這似乎是一個Android的錯誤:根據API,你可以使用上下文對象初始化一個網頁視圖(但是這可能導致你所提到的bug)。

+3

如果我可以讓你100次以上,我會!帶有應用程序上下文的WebView是保持面向方向更改的WebView內部狀態的關鍵能力。很棒的發現。 – Kevin 2014-07-17 21:19:14