2013-03-12 25 views
1

停止我的計劃這裏是我的代碼的原型: -ProgressDialog.show裏面的AsyncTask從執行

class something extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     String str = objectofanotherthing.execute("").get(); 
    } 

    class anotherthing extends AsyncTask 
    { 
     ProgressDialog Dialog; 
     protected void onPreExecute() 
     { 
      Dialog = ProgressDialog.show(context, "Progressing", "Working on it,"); 
     } 

     protected String doInBackground(String... params) 
     { 
      ... 
     } 

     protected void onPostExecute(Integer result) 
     { 
      Dialog.dismiss(); 
     } 
    } 
} 

當我執行我的代碼,我的程序似乎停止在ProgressDialog.show,沒有崩潰沒有錯誤。當我評論這部分時,程序執行得很好。我不確定可以做什麼。誰能幫我這個。提前致謝。

回答

2

如果您使用get()調用AsyncTask,則會阻止UI線程,並且您的應用可能會停止響應。請撥打get(),以便它只是​​。

objectofanotherthing.execute(""); 

這意味着現在你的執行獨立於UI線程中完成的,所以你不能指望你的字符串來保存有用的東西。爲了解決這個問題,使AsyncTask成爲你Activity中的一個嵌套類(你的代碼片段已經這樣做了),讓doInBackground()返回一些有用的東西,並在onPostExecute()中關閉對話框並設置你需要設置的任何東西。

嵌套類的替代方法是將活動關閉傳遞給AsyncTask或定義接口,但如果該任務適用於一個活動,則嵌套更容易。

+0

我做了你說的,我有例外: - android.view.WindowManager $ BadTokenException:無法添加窗口 - 標記null不適用於應用程序null – daemon54 2013-03-13 00:05:06

+0

@ daemon54請確保您的「上下文」是一個活動的實例。如果您在Activity中使用嵌套的AsyncTask,則可以執行'something.this'而不是'context'。 – 2013-03-13 00:06:14

+0

嘿A - C,當我嘗試Activity.this並且get()似乎也在使用它時,我得到了結果。更有趣的是progressdialog會自動關閉。我需要觸摸屏幕以使其熄滅。關於我能做些什麼的任何建議。 – daemon54 2013-03-13 00:13:03