Webview crashes on select box or any Dialog

筅森魡賤 提交于 2019-12-20 02:44:09

问题


I have an application where clicking on an item in a list shows webview with javascript injected.I need to save the webview object so that when the user presses the same item again the existing webview is shown instead of reloading it and injecting the javascript again.I am able to save the webview object in Arraylist of webview inside the application class.

I check whether the item already exists in the Arraylist and if it do exists take the corresponding object and set the object as the content of the activity as shown below.

     temp_WebView=new WebView(this);                
     temp_WebView=(WebView)application.getWebview(j);
     ViewGroup parent = (ViewGroup) application.getWebview(j).getParent();
     parent.removeView(application.getWebview(j));  
     setContentView(temp_WebView);

This works fine but when clicking on any of the select box inside the webview where a dialog is populated it gets crashed  with the following error,


WARN/WindowManager(60): Attempted to add application window with unknown token HistoryRecord{4506d1e8 tabviewapp.com/.Webresults}.  Aborting.

 DEBUG/AndroidRuntime(500): Shutting down VM

 WARN/dalvikvm(500): threadid=1: thread exiting with uncaught exception (group=0x4001d800)    
 ERROR/AndroidRuntime(500): FATAL EXCEPTION: main    
 ERROR/AndroidRuntime(500): android.view.WindowManager$BadTokenException: Unable to  add window -- token android.os.BinderProxy@45034510 is not valid; is your activity running?
 ERROR/AndroidRuntime(500): at android.view.ViewRoot.setView(ViewRoot.java:505)
 ERROR/AndroidRuntime(500): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)

 ERROR/AndroidRuntime(500):  at      android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)

 ERROR/AndroidRuntime(500):     at android.view.Window$LocalWindowManager.addView(Window.java:424)

 ERROR/AndroidRuntime(500):     at android.app.Dialog.show(Dialog.java:241)

 ERROR/AndroidRuntime(500):     at android.webkit.WebView$InvokeListBox.run(WebView.java:7095)

 ERROR/AndroidRuntime(500):     at android.os.Handler.handleCallback(Handler.java:587)

 ERROR/AndroidRuntime(500):     at android.os.Handler.dispatchMessage(Handler.java:92)

 ERROR/AndroidRuntime(500):     at android.os.Looper.loop(Looper.java:123)

 ERROR/AndroidRuntime(500):     at android.app.ActivityThread.main(ActivityThread.java:4627)

 ERROR/AndroidRuntime(500):     at java.lang.reflect.Method.invokeNative(Native Method)

 ERROR/AndroidRuntime(500):     at java.lang.reflect.Method.invoke(Method.java:521)

 ERROR/AndroidRuntime(500):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

 ERROR/AndroidRuntime(500):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

 ERROR/AndroidRuntime(500):     at dalvik.system.NativeStart.main(Native Method)

 WARN/ActivityManager(60):   Force finishing activity tabviewapp.com/.Webresults

I think the problem is with the context of the webview but not able to figure out how to set the context for the existing object or pass context to dialog generated inside the webview.

Thanks in advance.


回答1:


I had a similar problem. In my case the webview was in an ActivityGroup. ActivityGroups and dialogs don't work out of the box. In my case I had to not use this as context, instead use getParent().

temp_WebView=new WebView(getParent());


来源:https://stackoverflow.com/questions/4755729/webview-crashes-on-select-box-or-any-dialog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!