Cómo corregir NPE en ViewRoot # updateBidiOptions?
En la consola de desarrolladores del mercado de Android, estamos recibiendo un montón de trazas de pila como esta (enviadas por los usuarios cuando nuestra aplicación se bloquea):
java.lang.NullPointerException at android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290) at android.view.ViewRoot.performTraversals(ViewRoot.java:737) at android.view.ViewRoot.handleMessage(ViewRoot.java:1792) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:143) at android.app.ActivityThread.main(ActivityThread.java:5068) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method)
No hemos sido capaces de reproducir el bloqueo y también cuando comprobamos el código fuente de Android, no hay ningún método llamado updateBidiOptions. Los comentarios del usuario parecen sugerir que el accidente ocurre cuando se centran en un EditText
. Muchos de los usuarios también mencionan que esto sucede en HTC Desire HD, pero no se está estrellando en los deseos que tenemos aquí.
- Necesidad de manejar excepción no captada y enviar archivo de registro
- Androide. La mejor manera de informar al desarrollador de las excepciones lanzadas
- JSONException: no hay valor para XYZ al intentar getString ("XYZ")
- Android: evitar el bloqueo de la aplicación debido a errores no controlados
- Utilización de Try Catch Manejo de excepciones o comprobaciones explícitas
¿Cómo podemos solucionar este problema?
- Cuántas llamadas de función causarán desbordamiento de pila
- La excepción es NULL siempre
- Excepciones de Android que manejan la mejor práctica?
- Manejador de errores por defecto de RxJava
- Detectar la excepción de AsyncTask. Necesito pensar
- Cómo capturar excepciones generadas con código nativo que se ejecuta en Android
- Excepción de tiempo de ejecución de clase intermitente de Android no encontrada
- Uso de la gestión de excepciones globales en android
Por lo general, cuando ve un NPE en un stacktrace que no implica ningún código propio, en algún momento ha pasado null como un parámetro al marco de Android en el que no se supone que.
Así que si usted tiene algún lugar en el código en el que podría estar en duda si está pasando null como una opción, verifique que se le permite hacer eso.
De lo contrario, ¿en qué versión de Android se está produciendo este accidente?
Si tenemos la fuente correcta para android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290)
debemos ser capaces de ver qué referencia se está haciendo referencia y es una referencia nula. Y retroceda desde allí hasta que veamos una referencia proporcionada desde su fuente (que es probablemente también nula).
Sin embargo, cuando miro la fuente para ViewRoot.java en mi clon de pan de jengibre, ni siquiera veo el método updateBidiOptions()
. Por lo tanto, necesito saber la versión aproximada de Android que se está utilizando, para dar una conjetura educada sobre qué referencia podría ser.
Sólo para terminar este: el problema era con una ROM personalizada (B0.8). El problema se resolvió cuando ROM se actualizó a B0.8.4 que ya no llama a updateBidiOptions.
Ok la solución fácil será esto: localiza la línea que actaully trae esto en tu código si dices que este es el edittext, así que envuelve todo lo que pertenece a él, en try and catch, entonces en el catch try haz lo que era Se supone que hacer en la primera vez, si es para dar el enfoque edittext, solicitar la focuse para ello.
Espero que esto ayude, Saludos cordiales.
Parece como si 1 de 2 posibles cosas están sucediendo aquí.
Es posible que los investigadores del MIT hayan optado por utilizar su aplicación para probar un poco de tecnología experimental denominada BiDi Screen . Probablemente modificaron algunos de los sistemas operativos de Android y lo recompilaron para que interfirieran con su tecnología experimental, posiblemente ejecutándose en algún dispositivo móvil experimental. Puede haber desenterrado uno de los "proyectos negros" de Google.
Otra idea es que está buscando un error de "localización de cadenas" de otro país. Véase Clase Bidi .
Un objeto Bidi proporciona información sobre el reordenamiento bidireccional del texto utilizado para crearlo. Esto es necesario, por ejemplo, para mostrar correctamente el texto en árabe o en hebreo. Estos lenguajes son intrínsecamente mezclados direccionalmente, ya que ordenan números de izquierda a derecha mientras ordena la mayoría del texto de derecha a izquierda.
Puesto que usted trabaja para una empresa más grande, pídale a su superior que le envíe un viaje de recolección de información a uno de los países de la Primavera Árabe para recopilar 'en datos de campo' sobre por qué su aplicación se está estrellando con tanta frecuencia.