1

我有问题显示AlertDialog。每当我运行代码时,应用程序都会没有响应并强制关闭。附上我的代码:

公共无效显示列表(查看视图){

     新的 AsyncTask<String, Void, List<Address>>() {

          protected List<Address> doInBackground(String...params) {
               /* 一些操作 */
               返回空值;
          }

          protected void onPostExecute(List<Address> 结果) {
               如果(结果大小()== 0){
                    /* 做点什么 */
               } 别的 {

                    /* 一些代码 */

                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    alert.setMessage(sometext);
                    警报.show();
               }
          }

     }.execute(目标);

}

这是我的 logCat

11-20 20:26:56.848: E/AndroidRuntime(29789): 致命异常: main
11-20 20:26:56.848: E/AndroidRuntime(29789): java.lang.NullPointerException
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.app.AlertDialog$Builder.(AlertDialog.java:359)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 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): 在 android.os.AsyncTask.finish(AsyncTask.java:602)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.os.AsyncTask.access$600(AsyncTask.java:156)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.os.Handler.dispatchMessage(Handler.java:99)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.os.Looper.loop(Looper.java:137)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 android.app.ActivityThread.main(ActivityThread.java:4511)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 java.lang.reflect.Method.invokeNative(Native Method)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 java.lang.reflect.Method.invoke(Method.java:511)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
11-20 20:26:56.848: E/AndroidRuntime(29789): 在 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 并且想知道为什么这个不能工作。

谢谢

4

3 回答 3

3
AlertDialog.Builder alert = new AlertDialog.Builder(this);

因为“this”将引用异步任务的匿名内部类,并且它需要来自活动的上下文

于 2012-11-20T13:25:34.350 回答
2

用这个..

AlertDialog.Builder alert = new AlertDialog.Builder(yourActivity.this);

如果您在 TabHost 中使用 AlertDialog,请使用以下行。

AlertDialog.Builder alert = new AlertDialog.Builder(getParent());
于 2012-11-20T13:27:57.877 回答
1

您在创建对话框时使用了错误的上下文。this关键字是对当前对象的引用,当您this在上下文中使用时,AsyncTask然后this引用 AsyncTask 对象。这是罪魁祸首。您需要使用您的父活动对象作为上下文,这可以通过编写来实现YouActivityClassName.this

AlertDialog.Builder alert = new AlertDialog.Builder(YouActivityClassName.this);
于 2012-11-20T13:35:02.457 回答