2012-05-22 22 views
6

Tôi đã đọc chủ đề tương tự ở đây, thậm chí googled nhưng không có giải pháp.Android/Java: onProgressUpdate() không được gọi?

onProgressUpdate() không được gọi.

Dưới đây là các mã:

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); 
    } 
} 

tôi đã cố gắng thiết lập một breakpoint trong onProgressUpdate() và nó không bao giờ gọi. Nó giống như mã chỉ là bỏ qua.

Ai đó có vấn đề tương tự và hóa ra chỉ là nhật thực chỉ gây rối với anh ấy nhưng tôi đã thử khởi động lại nó mà không thành công.

Bất kỳ ý tưởng nào?

Trả lời

11

Tôi nghĩ rằng bạn đã bỏ lỡ một số điều trên mã của bạn. Hãy thử với điều này:

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

Điều đó đã làm được! Tôi là loại mới với Java vì vậy tôi đã cố gắng để giữ cho nó càng đơn giản càng tốt, tôi không biết Generics được yêu cầu. Còn một câu hỏi nữa, tại sao tôi không thể gọi publishProgress() từ onCancelled()? Điều đó có vẻ như nó sẽ là có thể. – qwerty

+0

Bạn có thể gọi publishProgress() nhưng trên giá trị thứ hai của generic bạn phải đặt Void, Như thế này: DoHardWork mở rộng AsyncTask . Hãy xem liên kết này http://developer.android.com/reference/android/os/AsyncTask.html – Pablo

+2

Thậm chí tốt hơn, thêm @Override vào khai báo phương pháp của bạn, bạn sẽ không phải đoán xem bạn đã làm đúng chưa, trình biên dịch sẽ làm điều đó cho bạn. –

Các vấn đề liên quan