2015-07-13 10 views
7

एप्लिकेशन मैं एक क्रैश होने मुद्दा है पर काम कर रहा हूँ के उपयोगकर्ताओं। यह कंसोल से मिलता है जो स्टैक ट्रेस है।एंड्रॉयड टुकड़ा अशक्त वस्तु mNextAnim आंतरिक Crach

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) 

दुर्घटना केवल उन 5.x या हमारे केवल एक कम से कम उन है कि सूचना मिल गया के साथ है कि आकाशगंगा Note3 या Galaxy S4 फोन के साथ होता है, लेकिन यह एक बहुत होता है। ऐसा लगता है कि टुकड़ों के बीच संक्रमण या कभी-कभी कैमरे से वापस आने पर। यहां मेरी संक्रमण विधियां हैं।

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(); 
} 

ये एकमात्र तरीका हैं जो ऐप में संक्रमण करते हैं। तो मुझे लगता है कि यह इनमें से किसी एक से आ रहा है। लेकिन स्टैक ट्रेस मैंने लिखा किसी भी कोड पर वापस नहीं जाता है, इसलिए मुझे यकीन नहीं है। मुझे इसी तरह की समस्याएं मिली हैं कि यह एक एंड्रॉइड 5.x मुद्दा है और कोई फिक्स नहीं था। तो इस समस्या को दूर करने के लिए किसी भी मदद होगी महान

+0

आप की जगह commitAllowingStateLoss() द्वारा (प्रतिबद्ध) की कोशिश की है? – user2641570

+0

नहीं मैंने कोशिश नहीं की है कि मैं इसे बदलने की कोशिश कर सकता हूं, देखें कि क्या होता है। – sethprogrammer

+0

यह तय करता है लेकिन पुराने उपकरणों के दुर्घटनाओं और अन्य समस्याओं के लिए समस्याएं उत्पन्न हुईं – sethprogrammer

उत्तर

2

विस्तार android.app.Fragment के बजाय android.support.v4.app.Fragment टुकड़े का उपयोग करें और android.support.v4.app.FragmentTransaction

इस बग पहले से ही इस सवाल में हल की android.app.FragmentTransaction बजाय इस्तेमाल करने की कोशिश:

Trying to remove fragment from view gives me NullPointerException on mNextAnim

इसे आजमाएं।

15

ऐसा इसलिए है क्योंकि आप remove()add() आदि null मान के साथ विधियों को कॉल कर रहे हैं।

और कृपया ध्यान रखें कि replace() = remove() ->add() एक-एक करके।

संबंधित मुद्दे