2012-04-10 12 views
5

Estoy usando una vista web en mi aplicación. Webview se crea utilizando el contexto de la aplicación. La aplicación se cierra al hacer clic en cualquier cuadro de selecciónBloqueo de la aplicación al hacer clic en el cuadro de selección en webview

04-10 14:19:14.502: E/AndroidRuntime(12628): Uncaught handler: thread main exiting due to uncaught exception 
04-10 14:19:14.542: E/AndroidRuntime(12628): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.ViewRoot.setView(ViewRoot.java:476) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.app.Dialog.show(Dialog.java:239) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.webkit.WebView$InvokeListBox.run(WebView.java:9509) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Handler.handleCallback(Handler.java:609) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Looper.loop(Looper.java:123) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.app.ActivityThread.main(ActivityThread.java:4595) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at java.lang.reflect.Method.invokeNative(Native Method) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at java.lang.reflect.Method.invoke(Method.java:521) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at dalvik.system.NativeStart.main(Native Method) 

Soy muy consciente de que esta pregunta se ha hecho ya muchas veces, pero estoy aún a encontrar ninguna solución de trabajo. Este problema se resolverá si utilizo el contexto de la actividad, pero tengo que usar el contexto de la aplicación debido a otras inquietudes. Para otras alertas y diálogos, los he manejado anulando en JsAlert() en webchromeclient, pero no puedo encontrar cómo puedo interceptar esto en mi vista web y crear mi propio diálogo de selector.

Cualquier tipo de sugerencias/ayuda es muy apreciada.

Adición de una muestra de relleno de mi aplicación vistaweb

class MyWebView extends WebView 
{ 

MyWebView(Context context) 
{ 

    super(context.getApplicationContext()); 
    setWebChromeClient(myWebChromeClient); 
    setWebViewClient(myWebViewClient); 
} 
} 
+0

¿Qué has guardado? ¿Se extiende Activity o WebView? – Bhavin

+0

su vista web. Se llama desde una actividad diferente. Estoy creando una vista web en tiempo de ejecución (no estoy usando ningún diseño) utilizando el contexto de la aplicación – androgeek

+0

si conoce esta situación, entonces debe usar el contexto Actividad en lugar de la Aplicación, ya que está intentando para hacer algunas cosas de UI sin el contexto de IU que debería ser de Actividad. –

Respuesta

0

me gustaría que utiliza extends Activity en tal caso.

acaba de tomar una referencia de here.

Y si desea utilizar webView además de esto, he escrito el siguiente código para eso.

mWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      // Handle the error 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    }); 
+0

Gracias por su apoyo, pero el problema es que estoy creando mi vista web para una biblioteca que puede ser utilizada por diferentes actividades de la aplicación, por lo que este es el enfoque que tengo que seguir en cualquier caso – androgeek

3

Esto se debe a que pasa el contexto de la aplicación en lugar de un contexto de actividad cuando crea el WebView. Para mostrar un cuadro de selección en Android desde WebView, WebView usa el contexto que se le da en su constructor y abre un selector de opción único nativo. Para mostrar este diálogo selector, necesita un contexto de actividad y no uno de aplicación. Cambie la línea:

super(context.getApplicationContext()); 

Con esta línea:

super(context); 

También es necesario asegurarse de que utiliza la vista web en la actividad de la que lo creó (no hay sentido en su uso en una actividad diferente). Si necesita la vista web en una actividad diferente, solo cree una usando el contexto de la actividad designada.

Cuestiones relacionadas