2012-05-22 142 views
6

我讀過類似的線程在這裏,甚至谷歌搜索,但沒有解決方案。Android/Java:onProgressUpdate()沒有被調用?

onProgressUpdate()只是沒有被調用。

下面的代碼:

public class DoHardWork extends AsyncTask { 

    @Override 
    protected Object doInBackground(Object... params) { 


     publishProgress("Requesting XML data"); 
     this.requestData(); 

     publishProgress("Returning results"); 
     this.returnResults(); 

     return null; 
    } 



    protected void onProgressUpdate(String text) { 
     super.onProgressUpdate(text); 
     MainActivity.setLog(text); 
    } 
} 

我試着設置在onProgressUpdate()斷點,它永遠不會被調用。這就像代碼被忽略。

有人有類似的問題,事實證明,只是日食只是搞亂他,但我試圖重新啓動它沒有成功。

任何想法?

回答

11

我認爲你錯過了你的代碼的一些東西。試試這個:

private class DoHardWork extends AsyncTask<Void, String, Long> { 
    protected Long doInBackground(Void... urls) { 
     publishProgress("Requesting XML data"); 
     this.requestData(); 

     publishProgress("Returning results"); 
     this.returnResults(); 

     return null; 
    } 

    protected void onProgressUpdate(String... progress) { 
     super.onProgressUpdate(progress); 
     MainActivity.setLog(progress[0]); 
    } 


} 
+0

這樣做了!我對Java很陌生,所以我儘量保持簡單,我不知道泛型是必需的。還有一個問題,爲什麼我不能從onCancelled()調用publishProgress()?這似乎應該是可能的。 – qwerty

+0

您可以調用publishProgress(),但是必須將Void放在泛型的第二個值上,如下所示:DoHardWork擴展AsyncTask 。看看這個鏈接http://developer.android.com/reference/android/os/AsyncTask.html – Pablo

+2

更好的是,在你的方法聲明中添加@Override,你不必猜測你是否做得對,編譯器會爲你做。 –