2009-10-13 90 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