2012-11-20 34 views
1

我有問題顯示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&ltAddress> result) { 
       if(result.size() == 0){ 
        /* do something */ 
       } else { 

        /* some code */ 

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

    }.execute(destination); 

} 

這裏是我的logcat

 
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,並想知道爲什麼這個不能工作。

謝謝

+0

你在tabHost使用alertDialog? –

+0

你的logcat在哪裏? – cjk

+0

如果您使用了tabhost,那麼您必須將您的上下文更改爲getParent。 –

回答

2

使用這個..

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

如果您在TabHost中使用AlertDialog,請使用下面的行..

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

非常感謝您的快速回復。您的解決方案正在運行 – Bobby

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

,因爲「這將」指的是匿名內部類異步任務,並從活動需要上下文

+0

感謝您的回覆。但是你的解決方案不起作用。我很感謝你的幫助。 – Bobby

1

您在創建對話框時使用了錯誤的上下文。 this關鍵字是對當前對象的引用,並且當您在AsyncTask的上下文中使用this時,則this引用AsyncTask對象。這是罪魁禍首。您需要使用您的父活動對象作爲背景,可以通過書面方式YouActivityClassName.this來實現:

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