2014-06-08 13 views
8

Ho lavorato su un codebase esistente per un po 'e sfogliando il nostro servizio di registro degli arresti ho notato un'eccezione che si verifica abbastanza frequentemente, non riesco a riprodurre questo problema, né ho il contesto perché lo scenario provi a scavare, poiché questo è un progetto piuttosto grande, è diventato sempre più difficile scoprire la causa di questa eccezione.Choreographer NullPointerException

Ho cercato online per problemi simili e non ho trovato alcuna informazione utile. Se qualcuno ha familiarità con questo problema, il tuo aiuto sarebbe molto apprezzato.

Stacktrace è la seguente:

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) 

Cin cin.

+0

Inserisci il codice dove si rompe. – Tareq

+0

@Tareq se ti interessa leggere interamente la mia domanda, non conosco il contesto di crash, quindi non posso pubblicare alcun codice. – woot

+2

L'oggetto di destinazione dell'animazione del valore è nullo per qualche motivo. – laalto

risposta

6

La questione si è rivelata un'animazione viene richiamato da un Handler utilizzando postDelayed(), che alla fine ha portato nel tentativo di animare un riferimento null View, dal momento che non è stata autorizzata correttamente secondo è gli eventi del ciclo di vita di accoglienza.

+0

Ho anche incontrato questo problema. Eppure non so quale animazione porti a questo crash. Potresti dirmi come hai iniziato la tua animazione per creare una traccia di stack come questa? Grazie. (Voglio dire, so che l'obiettivo dovrebbe essere nullo, ma oltre a ciò, come viene creata e avviata l'animazione in Choreographer $ FrameDisplayEventReceiver.run?) – DenMark

+0

Sì, se la vista è nulla, questo è l'errore. Le mie animazioni hanno funzionato su un dispositivo ma non su un altro e la risposta era un file xml di layout leggermente diverso. Doh! –

+0

quindi come prevenirlo? non possiamo rimuovere il 'Handler' –

0

Ho esaminato questa eccezione ora e ho scoperto che stavo ottenendo l'istanza della vista con animazione da getActivity().findViewById. Mentre ero in un frammento ho dovuto istanziarlo dal rootview gonfiato contenente la vista.

In pratica ho spostato la vista dal layout Attività al frammento, ma non ho modificato il codice. Quindi il rootview.findViewById ha risolto il mio problema.

mio stacktrace:

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) 
3

forse si tagret è nullo, registro di stampa con animatorSet.getTarget() per vedere

+0

Questa domanda è stata già risolta su un anno fa ... – Khalos

+0

E accettato !! –

+0

@ La risposta di Raul è valida. NPE può verificarsi anche quando la destinazione non è impostata (vale a dire nulla). Si prega di rimuovere i vostri downvotes. – Ognyan

2

Inoltre ottengo questa traccia dello stack quando uso: ObjectAnimator animatore = ObjectAnimator. ofFloat (this, "scale", 1); .... animator.start()

corsa nel 4.0.x Android, ma va bene per la versione più alto, si può anche riferirsi di commit questo ragazzo, anche se non come risolvere faccio, tuttavia questo è il causa principale sicuramente.

+0

Infine, scopro che, non esiste una proprietà chiamata "scale", questa è la causa principale del crash su Android 4.0.x, ma va bene su 5.0 Io uso in questo modo http://stackoverflow.com/questions/ 4946295/android-expand-collapse-animation per ottenere la stessa animazione, funziona perfettamente, spero che questo possa aiutarti. –

-1

enter image description here

ho risolto il problema aggiungendo l'animazione a un animationSet proprio come questo:

+1

Per favore ** [modifica] ** il tuo post e mostra il codice attuale come testo al posto degli screenshot. Gli altri non possono copiare e incollare dalle tue immagini. [Vedi qui] (https://meta.stackoverflow.com/a/285557/1402846) per i dettagli. Grazie. – Pang

0

Fidati di me, ho trovato la soluzione di questo problema di crash su dispositivi 4.0.x.

Il problema è quando si utilizza ObjectAnimator senza il valore 'start' e 'end', l'api sui dispositivi 4.0.x non riesce a trovare il valore 'start' da implementare.

Ad esempio, questo porterà a bloccarsi in dispositivi 4.0.x

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

E questo codice lavoro perfetto su tutte le api dispositivi di livello

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

La ragione è la visualizzazione di destinazione è nullo. ObjectAnimator ofFloat(Object target, ...).
Questo arresto arrecherà il numero solo con il dispositivo in 4x.
Non ci sono crash in un altro dispositivo

Problemi correlati