Android 警报对话框生成器停止响应

Android 警报对话框生成器停止响应,android,android-alertdialog,Android,Android Alertdialog,我无法显示AlertDialog。每当我运行代码时,应用程序就会变得没有响应并强制关闭。随函附上我的密码: public void displayList(View view){ new AsyncTask<String, Void, List<Address>>() { protected List<Address> doInBackground(String... params) { /*

我无法显示AlertDialog。每当我运行代码时,应用程序就会变得没有响应并强制关闭。随函附上我的密码:

public void displayList(View view){ new AsyncTask<String, Void, List<Address>>() { protected List<Address> doInBackground(String... params) { /* some operations */ return null; } protected void onPostExecute(List<Address> result) { if(result.size() == 0){ /* do something */ } else { /* some code */ AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setMessage(sometext); alert.show(); } } }.execute(destination); } 这是我的日志

11-20 20:26:56.848: E/AndroidRuntime(29789): FATAL EXCEPTION: main 11-20 20:26:56.848: E/AndroidRuntime(29789): java.lang.NullPointerException 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.app.AlertDialog$Builder.(AlertDialog.java:359) 11-20 20:26:56.848: E/AndroidRuntime(29789): at com.ceria.tuntun.MainActivity$5.onPostExecute(MainActivity.java:201) 11-20 20:26:56.848: E/AndroidRuntime(29789): at com.ceria.tuntun.MainActivity$5.onPostExecute(MainActivity.java:1) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.os.AsyncTask.finish(AsyncTask.java:602) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.os.AsyncTask.access$600(AsyncTask.java:156) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.os.Handler.dispatchMessage(Handler.java:99) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.os.Looper.loop(Looper.java:137) 11-20 20:26:56.848: E/AndroidRuntime(29789): at android.app.ActivityThread.main(ActivityThread.java:4511) 11-20 20:26:56.848: E/AndroidRuntime(29789): at java.lang.reflect.Method.invokeNative(Native Method) 11-20 20:26:56.848: E/AndroidRuntime(29789): at java.lang.reflect.Method.invoke(Method.java:511) 11-20 20:26:56.848: E/AndroidRuntime(29789): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 11-20 20:26:56.848: E/AndroidRuntime(29789): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 11-20 20:26:56.848: E/AndroidRuntime(29789): at dalvik.system.NativeStart.main(Native Method) 我不知道会发生什么。我已经用了很多次AlertDialog,不知道为什么这个不能工作

多谢各位

AlertDialog.Builder alert = new AlertDialog.Builder(this);
因为这将引用异步任务的匿名内部类,并且它需要来自活动的上下文

因为这将引用异步任务的匿名内部类,并且它需要来自活动的上下文,所以请使用此

AlertDialog.Builder alert = new AlertDialog.Builder(yourActivity.this);
如果您在TabHost中使用AlertDialog,请在下面一行使用

AlertDialog.Builder alert = new AlertDialog.Builder(getParent());
用这个

AlertDialog.Builder alert = new AlertDialog.Builder(yourActivity.this);
如果您在TabHost中使用AlertDialog,请在下面一行使用

AlertDialog.Builder alert = new AlertDialog.Builder(getParent());

创建对话框时使用了错误的上下文。this关键字是对当前对象的引用,当您在AsyncTask的上下文中使用该关键字时,它指的是AsyncTask对象。这就是罪魁祸首。您需要将父活动对象用作上下文,这可以通过写入YouActivityClassName来实现。此:


创建对话框时使用了错误的上下文。this关键字是对当前对象的引用,当您在AsyncTask的上下文中使用该关键字时,它指的是AsyncTask对象。这就是罪魁祸首。您需要将父活动对象用作上下文,这可以通过写入YouActivityClassName来实现。此:


您是否在tabHost中使用alertDialog?如果您使用tabHost,则必须将上下文更改为getParent。很抱歉,我是新来的,不知道tabHost的含义。顺便说一句,我会试试@xitij的解决方案。不要在subject pleaseSorry@WebnetMobile.com中放置标签,这是我的错。你在tabHost中使用alertDialog吗?如果你使用tabHost,那么你必须将上下文更改为getParent。很抱歉,我是新来的,我不知道tabHost是什么意思。顺便说一句,我会试试@xitij的解决方案。不要在subject pleaseSorry@WebnetMobile.com中添加标签,这是我的错。非常感谢您的快速回复。您的解决方案有效。非常感谢您的快速回复。您的解决方案有效。感谢您的回复。但你的解决方案不起作用。谢谢你的帮助,谢谢你的回复。但你的解决方案不起作用。谢谢你的帮助。