Android Fragment null mNextAnim Inner Crach Object

Users of the application I'm working on have a problem. This is the stack trace I get from the console.

java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:924) at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1605) at android.support.v4.app.FragmentManagerImpl$4.run(FragmentManager.java:532) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5942) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

Failure occurs only for users who have Galaxy Note3 or Galaxy S4 phones with 5.x or at least the ones we just reported, but this has happened a lot. It seems that this happens when moving between fragments or sometimes when returning from the camera. Here are my transition methods.

 public void popBackStackToOr(String popBackFragmentName, String secondPopBackFragment) { int backStackId = 0; int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); List<Fragment> fragments = getSupportFragmentManager().getFragments(); for (int k = (backStackCount - 1); k > 0; k--) { String aFragmentClass = fragments.get(k).getClass().toString(); String[] splitList = aFragmentClass.split("\\."); aFragmentClass = splitList[splitList.length - 1]; boolean firstOptionTrue = aFragmentClass.equalsIgnoreCase(popBackFragmentName); boolean secondOptionTrue = aFragmentClass.equalsIgnoreCase(secondPopBackFragment); if ( (firstOptionTrue) || (secondOptionTrue) ) { backStackId = getSupportFragmentManager().getBackStackEntryAt(k).getId(); break; } } getSupportFragmentManager().popBackStack(backStackId, android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE); //Immediate } public void popBackStackForReview(String popBackFragmentName) { int backStackId = 0; int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); List<Fragment> fragments = getSupportFragmentManager().getFragments(); for (int k = (backStackCount - 1); k > 0; k--) { String aFragmentClass = fragments.get(k).getClass().toString(); String[] splitList = aFragmentClass.split("\\."); aFragmentClass = splitList[splitList.length - 1]; if (aFragmentClass.equalsIgnoreCase(popBackFragmentName)) { backStackId = getSupportFragmentManager().getBackStackEntryAt(k).getId(); break; } } getSupportFragmentManager().popBackStack(backStackId, android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE); } public void transitionToLoginPage() { Fragment newFragment = new LoginPage(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.frame_container, newFragment); //transaction.addToBackStack(null); transaction.commitAllowingStateLoss(); } public void transitionToNewScreen(Fragment newFragment, Bundle bundle) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (currentFragment != null) { transaction.remove(currentFragment); } currentFragment = newFragment; if (bundle != null) { newFragment.setArguments(bundle); } transaction.replace(R.id.frame_container, newFragment); transaction.addToBackStack("dummy"); transaction.commitAllowingStateLoss(); } public void transitionToNewScreenAndEmptyStack(Fragment newFragment) { getSupportFragmentManager().popBackStack(0, android.support.v4.app.FragmentManager.POP_BACK_STACK_INCLUSIVE); currentFragment = newFragment; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.frame_container, newFragment); transaction.addToBackStack(null); transaction.commitAllowingStateLoss(); } 

These are the only methods that make the transition in the application. Therefore, I assume that this comes from one of them. But the stack trace does not return to the code I wrote, so I'm not sure. I found similar problems saying it was a problem with Android 5.x and there were no fixes. So any help to fix this problem would be great

+7
java android android-studio android-fragments back-stack
source share
2 answers

This is because you are calling remove() add() , etc. methods with null value.

and keep in mind that replace() = remove() add() one by one.

+15
source share

Try using fragments extending android.support.v4.app.Fragment instead of android.app.Fragment and use android.app.FragmentTransaction instead of android.support.v4.app.FragmentTransaction

This error has already been resolved on this issue:

Trying to remove a fragment from a view gives me a NullPointerException on mNextAnim

Give it a try.

+2
source share

All Articles