Intereting Posts
Как разработать приложение для распознавания голоса, например, говорящий тома Использовать прокси в Visual Studio Emulator для Android Не удается просмотреть файл в проводнике Windows, когда он отображается в обозревателе файлов Android. Какова его возвращаемая стоимость openAccessory? Android ClassCastException с пустым типом API-ключ для GCM неожиданно недействителен? Несанкционированная ошибка (401) Тип ввода html = число не позволяет десятичные точки на определенных дроидах Как управлять настраиваемой настройкой предпочтений Ошибка «только для чтения файловой системы» при записи на SD-карту Панель действий setDisplayHomeAsUpEnabled не работает на ICS Есть ли способ изменить системный пользовательский агент эмулятора Genymotion? Выполнение скриншота программно не захватывает содержимое поверхности Как показать уведомление по Android после каждых 48 часов? Как добавить Android Android SDK с помощью @AAR Как узнать, доступен ли просмотр внутри прокрутки полностью или нет

Хореограф NullPointerException

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

Я искал в Интернете похожие проблемы и не нашел никакой полезной информации. Если кто-то знаком с этой проблемой, ваша помощь будет принята с благодарностью.

Stacktrace выглядит следующим образом:

java.lang.NullPointerException at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505) at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:487) at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:517) at android.animation.ValueAnimator.start(ValueAnimator.java:936) at android.animation.ValueAnimator.start(ValueAnimator.java:946) at android.animation.ObjectAnimator.start(ObjectAnimator.java:465) at android.animation.AnimatorSet$1.onAnimationEnd(AnimatorSet.java:579) at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056) at android.animation.ValueAnimator.access$400(ValueAnimator.java:50) at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:644) at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:660) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:543) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5105) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) at dalvik.system.NativeStart.main(NativeStart.java) 

Приветствия.

Проблема оказалась анимацией, вызванной Handler с использованием postDelayed() , что в конечном итоге привело к попытке анимировать ссылку на нулевой View , поскольку она не была очищена должным образом в соответствии с событиями жизненного цикла хоста.

Возможно, у вас тэгрит равен нулю, распечатайте журнал с помощью аниматораSet.getTarget (), чтобы увидеть

Я также получаю эту трассировку стека, когда использую: ObjectAnimator animator = ObjectAnimator.ofFloat (это «шкала», 1); …. animator.start ()

Запустить в android 4.0.X, но это нормально для более высокой версии, вы также можете сослаться на фиксацию этого парня, хотя я не понимаю, как это исправить, но это определенная причина.

Теперь я прошел через это исключение и выяснил, что получаю экземпляр представления с анимацией из getActivity().findViewById . Хотя я был в фрагменте, мне пришлось создать его экземпляр из корневого окна, завышенного, содержащего представление.

Я в основном переместил представление из макета Activity в Fragment, но не изменил код. Итак, rootview.findViewById решил мою проблему.

Мой стек:

 java.lang.NullPointerException at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505) at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:392) at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:495) at android.animation.ValueAnimator.start(ValueAnimator.java:913) at android.animation.ValueAnimator.start(ValueAnimator.java:923) at android.animation.ObjectAnimator.start(ObjectAnimator.java:370) at eu.davidea.passwordcloud.ui.ItemDetailFragment$3.onClick(ItemDetailFragment.java:162) at android.view.View.performClick(View.java:4084) at android.view.View$PerformClick.run(View.java:16966) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 

Поверьте мне, я нашел решение этой проблемы сбоя на устройствах 4.0.x.

Проблема заключается в том, что вы используете ObjectAnimator без значения «start» и «end», устройства api on 4.0.x не могут найти значение «start» для реализации.

Например, это приведет к сбою на устройствах 4.0.x

 int endRadiusValue = 10; ObjectAnimator .ofFloat(roundedGradientDrawable, "cornerRadius", endRadiusValue) .setDuration(200) .start(); 

И этот код отлично работает на всех устройствах уровня api

 int startRadiusValue = 0; int endRadiusValue = 10; ObjectAnimator .ofFloat(roundedGradientDrawable, "cornerRadius", startRadiusValue, endRadiusValue) .setDuration(200) .start(); 

Введите описание изображения здесь

Я решаю проблему, добавив анимацию в AnimSet так: