2011-04-04 5 views
26

En la consola de desarrollador en el mercado Android que estamos recibiendo una gran cantidad de trazas de pila de este tipo (enviadas por los usuarios cuando nuestros aplicación se bloquea):Cómo reparar NPE en ViewRoot # updateBidiOptions?

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 han sido capaces de reproducir el accidente y también cuando revisamos el código fuente de Android, no hay un método llamado updateBidiOptions. Los comentarios de los usuarios parecen sugerir que el bloqueo ocurre cuando se enfocan en un EditText. Muchos de los usuarios también mencionan que esto sucede en HTC Desire HD pero no está fallando en los deseos que tenemos aquí.

¿Cómo podemos solucionar este problema?

+0

¿Eso es todo lo que obtienes? No encontrará 'updateBidiOptions' en su base de código, ya que es un método interno de Android. –

+0

Sí, eso es todo lo que obtengo (410 informes hasta ahora). – perja

+1

Supongo que el método ViewRoot # updateBidiOptions es algo agregado por HTC para soportar BiDi en Android. – perja

Respuesta

1

Solo para terminar este: el problema fue con una ROM personalizada (B0.8). El problema se resolvió cuando esa ROM se actualizó a B0.8.4, que ya no llama a updateBidiOptions.

0

bien la solución fácil será esta: busque la línea que realmente trae esto en su código si dice que este es el texto de edición, entonces envuelva todo lo que le pertenece, intente y atrape, luego en la captura intente hacer lo que se suponía que debía hacer la primera vez, si se trataba de dar el foco de texto de edición, solicite el enfoque para ello.

Espero que esto ayude, Saludos cordiales.

+0

Desde stacktrace, no hay nada en la pila que active la llamada a updateBidiOptions(), lo que significa que un try/catch nunca podrá detectar esta excepción, ya que está ocurriendo completamente desde el código del sistema/plataforma. – Joe

2

Normalmente cuando ve un NPE en una pila que no involucra ninguno de sus propios códigos, en algún momento ha pasado nulo como un parámetro para el framework de Android donde no debería.

Así que si tiene algún lugar en el código donde pueda tener dudas si está pasando nulo como una opción, compruebe que puede hacerlo.

De lo contrario, ¿en qué versión de Android se está produciendo este bloqueo?

Si tenemos la fuente correcta para android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290) deberíamos poder ver a qué referencia se refiere y es una referencia nula. Y retroceda desde allí hasta que veamos una referencia proporcionada por su fuente (que probablemente también sea nula).

Sin embargo, cuando miro la fuente de ViewRoot.java en mi clon gingerbread, ni siquiera veo el método updateBidiOptions(). Por lo tanto, necesito saber la versión aproximada de Android que se utiliza, para dar una idea aproximada de qué referencia podría ser.

0

Parece que una de cada 2 cosas posibles suceden aquí.

Es posible que los investigadores del MIT hayan elegido usar su aplicación para probar una tecnología experimental denominada BiDi Screen. Probablemente modificaron parte del SO Android y lo recompilaron para interactuar con su tecnología experimental que posiblemente se ejecutara en algún dispositivo móvil experimental. Es posible que haya desenterrado uno de los "proyectos negros" de Google.

Otra idea es que está viendo un error de "localización de cadena" de otro país. Ver Class 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 árabe o hebreo. Estos idiomas son intrínsecamente mixtos direccionales, ya que ordenan los números de izquierda a derecha mientras ordenan la mayoría de los demás textos de derecha a izquierda.

Dado que usted trabaja para una empresa más grande, pregunte a su superior hasta que le envíe en una recopilación de información viaje a uno de los países de la Primavera Árabe para reunir 'en los datos de campo' sobre por qué su aplicación se bloquea con tanta frecuencia.

Cuestiones relacionadas