2014-09-30 241 views
-1

我坐在一個代碼上的5小時,其中AyncTask運行不正常。我剛剛創建了另一個簡單的Activity(因爲在最後一個onPostExecute()不起作用),現在這個簡單的Activity也不會啓動AsyncTask。任何人都可以看到我做錯了什麼?AsyncTask甚至沒有啓動

public class ServerStatus extends Activity { 
Context context;  
private ProgressDialog pd; 
int a; 
TextView test; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.server_status); 
     context=this; 
     test=(TextView) findViewById(R.id.welcomemessage); 
     new Download().execute(); 


    } 

    public class Download extends AsyncTask<Void, Void, Void>{ 

     protected Void onPreExecute(Void... arg0) { 
      pd = new ProgressDialog(context); 
      pd.setTitle("Processing..."); 
      pd.setMessage("Please wait."); 
      pd.setCancelable(false); 
      pd.setIndeterminate(true); 
      pd.show(); 
      return null; 
     } 


     @Override 
     protected Void doInBackground(Void... arg0) { 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      a++; 
      return null; 
     } 


     protected Void onPostExecute(Void... arg0) { 
      if (pd!=null) 
       pd.dismiss(); 
      test.setText(a); 
      return null; 
     } 

    } 

} 

另外,是否NavigationDrawer阻止UI線程?因爲我實施它時甚至不能更新TextView

+0

您應該在onProgressUpdate()內做UI組件修改。導航抽屜不會阻塞UI線程。當你嘗試並運行它時會發生什麼? – 2014-09-30 20:10:09

+0

這裏是我的[回答類似的問題] [1] [1]:http://stackoverflow.com/questions/25752210/cant-see-progressdialog-while-asynctask-run-in-background/25752553#25752553 – user3144836 2014-09-30 20:14:37

+0

那麼,我是從onPostExecute()更新UI線程,所以也許有我的問題(它沒有更新任何東西,甚至沒有做任何事情,就像它沒有被調用)。那麼明天再試試看吧。感謝您的建議。 – Darknez 2014-09-30 20:15:03

回答

2

的方法是不正確的。你應該添加@Override註釋給他們,所以它會在你做錯了的時候大吼大叫。

onPreExecute()不採取任何params所以它應該是

@Override 
protected Void onPreExecute() { 

也onPostExecute()的`帕拉姆類型更改爲

@Override 
protected Void onPostExecute(Void arg0) { 

爲刪除 「...」 See Varargs說明。

Docs

Post explaining AsyncTask and getting values

類聲明的PARAMS是doInBackground()onProgressUpdate()onPostExecute()

至於NavDrawer,我不知道你用的是一樣的東西問題。

+0

似乎工作,但可能我做錯了,因爲在@Override添加到onPostExecute()後它說:「方法onPostExecute(Void ...)類型ServerStatus.download必須覆蓋或實現一個超類型方法「。可能我弄砸了一些有爭議的事情,但如果你或其他人會糾正我,我會很感激。 5小時後,我沒有想直... – Darknez 2014-09-30 20:12:12

+0

啊,是的,分心。查看我的更新。 – codeMagic 2014-09-30 20:14:38

+0

謝謝。現在它正在工作。該死的我是noob ... – Darknez 2014-09-30 20:17:43

-1

您需要onPreExecute

pd = new ProgressDialog(context); 

更改代碼以

pd = new ProgressDialog(getActivity()); 
+0

方法getActivity()是未定義的類型ServerStatus.download – Darknez 2014-09-30 20:04:02

+0

對不起,我以爲你正在使用片段,我的不好 – anetha 2014-09-30 20:06:24

相關問題