2016-05-20 3 views
-1

Когда я пытаюсь рассеять FragmentDialog, мое приложение иногда падает.
Вот лог:NullPointerException: попытка вызвать виртуальный метод 'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()'

Process: com.xxx, PID: 9981 
java.lang.RuntimeException: Error receiving broadcast Intent { act=xxxx flg=0x10 (has extras) } in xxxxxx 
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:893) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5438) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()' on a null object reference 
    at android.app.DialogFragment.dismissInternal(DialogFragment.java:296) 
    at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:277) 
    at xxxxx.updateStatus(BaseAppCompatActivity.java:96) 
    at xxxxx.access$000(BaseAppCompatActivity.java:43) 
    at xxxxx$1.onReceive(BaseAppCompatActivity.java:79) 
    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:883) 

xxxxx.updateStatus (BaseAppCompatActivity.java:96)
эта линия пытаются уволить DialogFragment:

mDialogFragment.dismissAllowingStateLoss(); 


DialogFragment в моей деятельности.

private SimpleBlockedDialogFragment mDialogFragment = SimpleBlockedDialogFragment.newInstance(); 

Так mDialogFragment не равно нулю.

Я показать диалог, как это:

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
mDialogFragment.updateMessage("xxx"); 
mDialogFragment.show(ft, "block_dialog"); 

И смещать диалог, как это:

mDialogFragment.dismissAllowingStateLoss(); 

Иногда я показываю диалог только один раз, но уволить более одного раза. Но я не думаю, что это может привести к краху.

Вот dismissInternal функция в DialogFragment:

void dismissInternal(boolean allowStateLoss) { 
    if (mDismissed) { 
     return; 
    } 
    mDismissed = true; 
    mShownByMe = false; 
    if (mDialog != null) { 
     mDialog.dismiss(); 
     mDialog = null; 
    } 
    mViewDestroyed = true; 
    if (mBackStackId >= 0) { 
     getFragmentManager().popBackStack(mBackStackId, 
       FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     mBackStackId = -1; 
    } else { 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.remove(this); 
     if (allowStateLoss) { 
      ft.commitAllowingStateLoss(); 
     } else { 
      ft.commit(); 
     } 
    } 
} 

журнал рассказывает мне, что getFragmentManager() возвращает нуль. Я не знаю, почему это произошло.
Как правильно отменить FragmentDialog?

обновление:
Стараюсь android.support.v4.app.FragmentTransaction, и до сих пор получаю исключение.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference 
    at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:196) 
    at android.support.v4.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:177) 

Помощь ~

+4

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –

+0

@LonnieZamora это исключение NullPointerException произошло в системе Android. –

+1

Что заставляет вас так думать? –

ответ

1

Попробуйте getSupportFragmentManager().beginTransaction(); это может помочь.

+0

спасибо, я попробую. Но почему я использую android.support.v4.app.FragmentTransaction вместо android.app.FragmentTransaction? –

Смежные вопросы