Android Fragment d'objet nul mNextAnim Interne Crach
Les utilisateurs de l'application que je suis en train de travailler sur vous avez un problème de crash. C'est la trace de la pile-je obtenir à partir de la 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)
Le crash se produit uniquement avec les utilisateurs qui ont Galaxy Nota3 ou Galaxy S4 avec 5.x ou au moins ceux de nos le seul qui l'ont signalé, mais il a beaucoup. Il semble se produire lors de la transition entre les fragments ou, parfois, en rentrant de la caméra. Voici ma transition méthodes.
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();
}
Ce sont les seules méthodes pour faire une transition dans l'application. Donc je suis en supposant qu'elle vient de l'un de ces. Mais la trace de la pile ne permet pas de revenir à n'importe quel code que j'ai écrit, donc je ne suis pas sûr. J'ai trouvé des problèmes similaires en disant que c'est un Android 5.x question et il n'y a pas de solution. Ainsi, toute aide pour supprimer ce problème serait génial
Non, je n'ai pas essayé, je peux essayer de le remplacer, voir ce qui se passe.
Qu'il fixe, mais causé des problèmes pour les appareils plus anciens, les accidents et autres problèmes
OriginalL'auteur sethprogrammer | 2015-07-13
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous appelez
remove()
add()
etc. méthodes avecnull
valeur.et s'il vous plaît gardez à l'esprit que
replace()
=remove()
->add()
un par un.OriginalL'auteur GreenRobo
Essayez d'utiliser des Fragments de l'extension de
android.support.v4.app.Fragment
au lieu deandroid.app.Fragment
et l'utilisation de laandroid.app.FragmentTransaction
au lieu deandroid.support.v4.app.FragmentTransaction
Ce bug est déjà résolu dans cette question:
De l'essayer.
OriginalL'auteur ArtKorchagin