java.lang.NullPointerException在Fragment中尝试使用AlertDialog.Builder时

时间:2015-05-21 16:32:53

标签: android android-fragments

我需要在Fragment中显示一个警告对话框(如果重要的话,在错误回调内)。这是错误:

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片段。让我感到困惑的问题是,如果使用系统BACK按钮,我 会导致此崩溃。如果使用我在操作栏中显示的应用程序的上/下菜单项,则此部分代码可以正常工作。

3 个答案:

答案 0 :(得分:0)

很可能<br/>正在返回getActivity(),这意味着您的片段不再附加到某个活动。

答案 1 :(得分:0)

当然,您正在获得NullPointerException,因为您的应用程序片段无法定义它所属的Activity。您可以尝试在用户按下后退按钮时定义上下文。

因此,如果您在片段中使用AlertDialogs,则应使用DialogFragment代替。

答案 2 :(得分:0)

你试试getContext()而不是getACtivity()它对我有用吗