NullPointerException en webview.java (android.webkit.WebView $ PrivateHandler.handleMessage)

Cada pocos días obtengo un informe de fallo para mi aplicación con el siguiente rastreo de pila o sus variantes pequeñas (con diferentes números de línea basados ​​en diferentes versiones de Android)

java.lang.NullPointerException at WebView.java:8241:in `android.webkit.WebView$PrivateHandler.handleMessage' Handler.java:99:in `android.os.Handler.dispatchMessage' Looper.java:150:in `android.os.Looper.loop' ActivityThread.java:4293:in `android.app.ActivityThread.main' Method.java:-2:in `java.lang.reflect.Method.invokeNative' Method.java:507:in `java.lang.reflect.Method.invoke' ZygoteInit.java:849:in `com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run' ZygoteInit.java:607:in `com.android.internal.os.ZygoteInit.main' NativeStart.java:-2:in `dalvik.system.NativeStart.main' 

Esta pila específica estaba en Android 2.3.4 en un dispositivo HTC EVO 3D PG86100. Mi aplicación recibe varias vistas en la Web para algunos escenarios de inicio de sesión relacionados con oAuth.

¿Cómo debo intentar resolver cómo solucionar esto? He intentado buscar en grepcode para encontrar la fuente, pero no puedo encontrar un número de línea coincidente que tenga sentido. ¿Es mi Grepcode-fu débil?

Me encontré con este problema recientemente y en mi caso me las arreglé para averiguar que una segunda solución de error estaba causando este problema.

Por lo tanto, si no creó una clase personalizada que extiende webview, que reemplaza onCheckIsTextEditor siempre devuelve true debido a una sugerencia en este informe de errores android … Me gustaría dejar de leer aquí.

Si lo ha hecho, entonces parece que esta corrección ya ha sido implementado por HTC y por alguna razón hace que se bloquee cuando recibe el enfoque. Esta cuestión se manifestó en dos lugares para mí, al colocar eventos táctiles en la vista y al establecer la visibilidad de las vistas. En mi proyecto establecí un WebViewClient y esperé hasta que la página terminara de cargar antes de establecer la visibilidad de la webview como visible. Esto provocó la siguiente traza de pila:

 java.lang.NullPointerException at android.webkit.WebView.navHandledKey(WebView.java:9353) at android.webkit.WebView.requestFocus(WebView.java:7910) at android.view.View.requestFocus(View.java:3718) at android.view.View.requestFocus(View.java:3696) at android.view.ViewRoot.focusableViewAvailable(ViewRoot.java:1803) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) at android.view.View.setFlags(View.java:4680) at android.view.View.setVisibility(View.java:3163) 

Al envolver la llamada setVisibility en un try / catch pude determinar si debería anular los eventos de toque o no. Si capturé el evento, eso significaría que debería desactivar la anulación. Este es un ejemplo de lo que hice:

 try { webView.setVisibility(View.VISIBLE); } catch (NullPointerException e) { Log.i(TAG, "Error setting webview visibility due to overriding focus. It will be disabled."); webView.setOverrideOnCheckIsTextEditor(false); // Confirm window is visible webView.setVisibility(View.VISIBLE); } 

Mi webvista personalizada ahora se ve así, con especial atención a los dos métodos finales:

 /** * When using a webview in a dialog, there are issues relating to the keyboard not appearing when focusing on a text box. * This overrides a function to ensure the keyboard is shown when focusing on a text box in a webview. * See link for bug report and solution. * * @see http://code.google.com/p/android/issues/detail?id=7189 * @see http://stackoverflow.com/questions/12325720 * @author James O'Brien * @since 10/16/2012 */ public class FocusableWebView extends WebView { private boolean mOverrideCheckIsTextEditor = true; /** * Default Constructor * * @param context */ public FocusableWebView(Context context) { super(context); } /** * Default Constructor * * @param context * @param attrs */ public FocusableWebView(Context context, AttributeSet attrs) { super(context, attrs); } /** * Default Constructor * * @param context * @param attrs * @param defStyle */ public FocusableWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onCheckIsTextEditor() { if (mOverrideCheckIsTextEditor) { return true; } else { return super.onCheckIsTextEditor(); } } /** * Enable/Disable overriding of onCheckIsTextEditor to always return true. */ public void setOverrideOnCheckIsTextEditor(boolean foo) { mOverrideCheckIsTextEditor = foo; } } 

Lo siento, no puedo entrar en más detalles sobre por qué esto corrige el problema. Todo lo que puedo asumir es que su relacionado con el enfoque y la desactivación dinámica funciona un regalo 🙂

** Actualización (12/11/12) **

Gestionado para resolver ambos problemas presentados anteriormente. Parecía ser un problema con el enfoque de la webview. Mi código ahora se parece a esto

 webView.setVisibility(View.VISIBLE); webView.setFocusable(true); webView.requestFocus(); 

Sugiero que asegúrese de que establece explícitamente el atributo focusable a 'true' o llama a setFocusable (true).

  • Android - Descargar e instalar el archivo apk en Webview
  • Android webview html cumplimiento?
  • Android: Abrir un ContextMenu desde onLongPress en WebView personalizado
  • El video de YouTube no se abre en webView
  • Error "ABI no admitido" en Chrome Webview
  • Webview guardar el problema de rotación de contraseña
  • Android - forma simple de entrada de usuario web-view para back-end java con jQuery Mobile
  • Android webview html5 vídeo autoplay no funciona en android 4.0.3
  • Cómo realizar un clic de botón dentro de un Webview Android
  • Android webview permanecer en la aplicación
  • ¿Cómo puedo cambiar CONTENT-TYPE de WebView # PostUrl ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.