Android 创建alerdialog时的NPE

Android 创建alerdialog时的NPE,android,Android,我正在调用方法AlertUser.AlertUser(getActivity())已从片段创建alertDialog,但它引发NPE错误 new Handler().postDelayed(new Runnable() { @Override public void run() { if(flag==false) {

我正在调用方法
AlertUser.AlertUser(getActivity())已从片段创建alertDialog,但它引发NPE错误

 new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                    if(flag==false)
                        {
                    progressDialog.cancel();
                    AlertUser.alertUser(getActivity());
                    cancel(true);
                        }
                    }
                }, 30000);
alertUser方法:

public static void alertUser(Context context)
    {
        AlertDialog.Builder alertDialog=new AlertDialog.Builder(context); 


        alertDialog.setTitle("Connection failure...!"+"\n");

        alertDialog.setMessage("\n"+"It looks like you have lost network connection. Please check your network connection or wait to re-connect"+"\n");





        // Setting  "Yes" Button
        alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,int which) {


                    /*Intent noNetwork=new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                    startActivityForResult(noNetwork,1443);*/



            }
        });

        alertDialog.show();
    }
logcat

02-05 15:47:06.440: E/AndroidRuntime(12050): FATAL EXCEPTION: main
02-05 15:47:06.440: E/AndroidRuntime(12050): java.lang.NullPointerException
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at com.abs.deliveryboy.AlertUser.alertUser(AlertUser.java:11)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at com.abs.deliveryboy.NewOrdersFragment$NewOrderTask$1.run(NewOrdersFragment.java:159)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.os.Handler.handleCallback(Handler.java:615)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.os.Looper.loop(Looper.java:137)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at android.app.ActivityThread.main(ActivityThread.java:4800)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at java.lang.reflect.Method.invoke(Method.java:511)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
02-05 15:47:06.440: E/AndroidRuntime(12050):    at dalvik.system.NativeStart.main(Native Method)
02-05 15:47:06.440:E/AndroidRuntime(12050):致命异常:主
02-05 15:47:06.440:E/AndroidRuntime(12050):java.lang.NullPointerException
02-05 15:47:06.440:E/AndroidRuntime(12050):在android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)上
02-05 15:47:06.440:E/AndroidRuntime(12050):在android.app.AlertDialog$Builder上。(AlertDialog.java:359)
02-05 15:47:06.440:E/AndroidRuntime(12050):在com.abs.deliveryboy.AlertUser.AlertUser(AlertUser.java:11)
02-05 15:47:06.440:E/AndroidRuntime(12050):在com.abs.deliveryboy.NewOrdersFragment$neworderstask$1.run(NewOrdersFragment.java:159)
02-05 15:47:06.440:E/AndroidRuntime(12050):在android.os.Handler.handleCallback(Handler.java:615)上
02-05 15:47:06.440:E/AndroidRuntime(12050):在android.os.Handler.dispatchMessage(Handler.java:92)上
02-05 15:47:06.440:E/AndroidRuntime(12050):在android.os.Looper.loop(Looper.java:137)上
02-05 15:47:06.440:E/AndroidRuntime(12050):位于android.app.ActivityThread.main(ActivityThread.java:4800)
02-05 15:47:06.440:E/AndroidRuntime(12050):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-05 15:47:06.440:E/AndroidRuntime(12050):位于java.lang.reflect.Method.invoke(Method.java:511)
02-05 15:47:06.440:E/AndroidRuntime(12050):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
02-05 15:47:06.440:E/AndroidRuntime(12050):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
02-05 15:47:06.440:E/AndroidRuntime(12050):在dalvik.system.NativeStart.main(本机方法)

正如@FD_uu所说,您不能从后台线程启动警报对话框。当您在后台线程中使用
getActivity()
时,它返回null,因此是NPE。您正在将null对象传递给另一个方法。最好在同一个活动/线程上执行

试试这个

public static void alertUser(Context context)
    {
        AlertDialog.Builder alertDialog=new AlertDialog.Builder(context); 


        alertDialog.setTitle("Connection failure...!"+"\n");

        alertDialog.setMessage("\n"+"It looks like you have lost network connection. Please check your network connection or wait to re-connect"+"\n");





        // Setting  "Yes" Button
        alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog,int which) {


                    /*Intent noNetwork=new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                    startActivityForResult(noNetwork,1443);*/



            }
        });
//previously it was like this alertDialog.show(); but it should be like this
        alertDialog.create.show();
    }

传递给
AlertDialog.Builder
构造函数的上下文是
null
,因此是NPE

如果片段未附加到活动,则片段
getActivity()
将返回
null
。由于您正在向处理程序发布异步可运行,因此无法保证在运行可运行时将片段附加到活动


您应该将有效的活动上下文作为参数传递给runnable,而不是使用
getActivity()
查询它。请注意,保留活动引用是获得严重内存泄漏的一种简单方法。

AlertUser.java的第11行是什么?