Подтвердить что ты не робот

Как исправить NPE в ViewRoot # updateBidiOptions?

В консоли разработчика на рынке Android мы получаем много трассировок стека, подобных этому (отправляется пользователями при сбое нашего приложения):

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)

Мы не смогли воспроизвести сбой, а также, когда мы проверяем исходный код Android, нет метода под названием updateBidiOptions. Комментарии пользователей, кажется, предполагают, что авария происходит, когда они фокусируются на EditText. Многие пользователи также упоминают, что это происходит на HTC Desire HD, но это не сбой на желаниях, которые у нас есть.

Как мы можем исправить эту проблему?

4b9b3361

Ответ 1

Просто, чтобы закончить этот: проблема была с пользовательским ПЗУ (B0.8). Проблема разрешилась, когда это ПЗУ было обновлено до B0.8.4, которое больше не вызывает updateBidiOptions.

Ответ 2

Обычно, когда вы видите NPE в стеке, который не связан с вашим собственным кодом, в какой-то момент вы передали значение null в качестве параметра в рамки Android, где вы не должны.

Итак, если у вас есть место в коде, где вы можете сомневаться в том, что вы передаете null в качестве опции, дважды проверьте, что вам разрешено это делать.

В противном случае, какая версия Android - это крах, происходящий на?

Если у нас есть правильный источник для android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290), мы должны уметь видеть, какая ссылка ссылается и является нулевой ссылкой. И отступите оттуда, пока мы не увидим ссылку, предоставленную из вашего источника (это, вероятно, также равно null).

Однако, когда я смотрю на источник для ViewRoot.java в моем клонировании пряников, я даже не вижу метод updateBidiOptions(). Таким образом, мне нужно знать приблизительную версию Android, чтобы дать обоснованное предположение, на какой ссылке она может быть.

Ответ 3

ok легкое решение будет таким: найдите строку, которая actaully приносит это в ваш код, если вы говорите, что это edittext, поэтому оберните все, что принадлежит ему, в попытке и поймать, а затем в catch попробуйте сделать то, что он должен был делать в первый раз, если он даст фокус edittext, запросите фокус для него.

Надеюсь, это поможет, С наилучшими пожеланиями.

Ответ 4

Кажется, что здесь происходит 1 из 2 возможных вещей.

Возможно, исследователи из MIT решили использовать ваше приложение для тестирования на экспериментальной части технологии, получившей название BiDi Screen. Вероятно, они модифицировали некоторые ОС Android и перекомпилировали его, чтобы связать свои экспериментальные технологии, возможно, работающие на каком-то экспериментальном мобильном устройстве. Возможно, вы обнаружили один из "черных проектов" Google.

Другая идея заключается в том, что вы смотрите на ошибку "String localization" из другой страны. См. Bidi классa > .

Объект Bidi предоставляет информацию о двунаправленном переупорядочении текста, используемого для его создания. Это необходимо, например, для правильного отображения текста на арабском или иврите. Эти языки по своей природе смешанно направлены, поскольку они упорядочивают числа слева направо, заказывая большинство других текстов справа налево.

С тех пор как вы работаете в более крупной компании, попросите, чтобы ваша высшая группа отправила вас в поездку по сбору информации в одну из арабских стран Spring для сбора "в полевых данных" о том, почему ваша заявка рушится так часто.