web-dev-qa-db-fra.com

Crash avec setnextanim?

Je continue à recevoir le crash de setnextanim sans laisser de trace à l'emplacement exact dans mon code. Voici le seul endroit où j'utilise nextanim:

@Override
    public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
        Animation defaultAnimation = super.onCreateAnimation(transit, enter, nextAnim);

        if (defaultAnimation == null && nextAnim != 0) {
            defaultAnimation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
        }

        if (defaultAnimation != null) {
            if (getView() != null) {
                getView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
            }

            defaultAnimation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                }

                public void onAnimationEnd(Animation animation) {
                    if (getView() != null) {
                        getView().setLayerType(View.LAYER_TYPE_NONE, null);
                    }
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }
            });
        }

        return defaultAnimation;
    }

et voici la trace que j'ai pu trouver:

FATAL EXCEPTION: main
Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
    at Android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.Java:765)
    at Android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.Java:2580)
    at Android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.Java:2367)
    at Android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.Java:2322)
    at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:2229)
    at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:700)
    at Android.os.Handler.handleCallback(Handler.Java:751)
    at Android.os.Handler.dispatchMessage(Handler.Java:95)
    at Android.os.Looper.loop(Looper.Java:154)
    at Android.app.ActivityThread.main(ActivityThread.Java:6119)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:886)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:776)

Une idée de ce que je fais mal qui pourrait invoquer ce crash? 

6
Marissa Nicholas

En regardant l'exception:

Java.lang.NullPointerException: tentative d'appeler la méthode virtuelle 'void Android.support.v4.app.Fragment.setNextAnim (int) 'sur un objet null référence

et le fait que la trace de la pile ne contienne aucune référence à votre code, je pense qu’il est raisonnable de supposer qu’elle n’est pas liée à cette partie de votre code. 

Au contraire, il est peut-être lié au fait qu'une vue est en train d'être collectée/annulée quelque part sur la ligne, puis essayée de l'utiliser plus tard, puis d'appeler show/hide ou similaire sur un objet null. Voir cette discussion .

7
eis

Dans mon cas, j'ai enlevé un fragment null de la pile:

val fragment = getSelectedFragment() // null
supportFragmentManager?.beginTransaction()
    ?.remove(fragment)
    ?.commit()
5
CoolMind

Vous pouvez également transmettre cette erreur lorsque vous demandez à la transaction de fragment de supprimer un fragment null

1
Camilo Romero