2015-05-21 19 views
0

我需要在Fragment中顯示一個警告對話框(如果有問題,請在錯誤回調中)。這裏的錯誤:java.lang.NullPointerException在片段中嘗試使用AlertDialog.Builder時

05-21 11:05:33.635 31869-31869/me.myapp.local E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at android.view.LayoutInflater.from(LayoutInflater.java:210) 
      at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:75) 
      at android.support.v7.app.AlertController$AlertParams.<init>(AlertController.java:673) 
      at android.support.v7.app.AlertDialog$Builder.<init>(AlertDialog.java:280) 
      at me.myapp.fragment.SectionFrag$1.failure(SectionFrag.java:179) 
      at retrofit.CallbackRunnable$2.run(CallbackRunnable.java:53) 
      at android.os.Handler.handleCallback(Handler.java:615) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 

而這裏的部分代碼:

@Override 
public void failure(final RetrofitError error) { 
Log.wtf(TAG, error); 
final AlertDialog.Builder alertDB = new  AlertDialog.Builder(getActivity(), android.support.v7.appcompat.R.style.Base_Theme_AppCompat_Dialog_Alert) 
alertDB.setCancelable(false); 

我使用API​​ 22和v4片段。我很詫異的問題是我只有如果使用系統返回按鈕得到這個崩潰。如果使用我的操作欄中顯示的應用程序的上/下菜單項,這部分代碼可以正常工作。

回答

0

最可能的是getActivity()正在返回null意味着您的片段不再附加到活動。

+0

工作將在用戶按下片段中的後退按鈕,VS在我的動作條按後退按鈕是這種情況?在這兩種情況下,我的片段的onPause()被調用。 – regretoverflow

+0

您可以在片段的onDetach()方法中添加日誌記錄以查看發生的時間。 –

0

當然你得到一個NullPointerException,因爲你的應用程序片段不能定義它屬於哪個活動。您可以嘗試在用戶按下後退按鈕時定義上下文。

因此,如果您在Fragment中使用AlertDialogs,則應該使用DialogFragment

+0

我添加了更多的調試,並且當按下後退按鈕時getActivity()返回null,但是當我的應用程序的後退/向上按鈕被按下時 – regretoverflow

0

你嘗試的getContext()與其使用getACtivity()對我來說

相關問題