2012-12-26 22 views
11

Tôi đang cố đặt biến trong hoạt động thành kết quả của AsyncTask của tôi. Tôi đã đọc rằng tôi không thể trả về một biến và rằng tôi sẽ phải thiết lập biến trong hoạt động của tôi và sau đó thay đổi nó trong phương thức onPostExecute.Đang đợi ASyncTask kết thúc hoặc biến được đặt

Vấn đề của tôi là sau khi AsyncTask kết thúc, tôi cần sử dụng biến đó. Tôi đang gặp rắc rối với điều này bởi vì tất cả các giải pháp tôi đã thử cho đến nay làm cho giao diện người dùng đóng băng và sau đó đi không đáp ứng.

Những gì tôi đã cố gắng cho đến nay:

while (!task.isCancelled()) { 
    // Wait... 
} 

while (variable == null) { 
    // Wait ... 
} 

Là những gì tôi đang làm là cách tốt nhất để vượt qua một biến từ AsyncTask đến Hoạt động của tôi? Nếu đó là sau đó làm thế nào tôi có thể chờ đợi cho công việc để hoàn thành trong hoạt động mà không cần khóa giao diện người dùng?

+10

Bạn không nên "chờ" cho 'AsyncTask'. Nó nên làm một cái gì đó khi nó được thực hiện, có lẽ trong 'onPostExecute()'. – Eric

+1

Trong phương thức 'onPostExecute()' tôi thay đổi biến trong hoạt động của tôi thành kết quả. Những gì tôi đang cố gắng làm là đợi cho đến khi biến được thay đổi. – Dan

+0

Chính xác - đừng làm điều này. Bản thân 'onPostExecute()' của 'AsyncTask' sẽ bắt đầu chuỗi các sự kiện mà bạn muốn xảy ra sau khi nhiệm vụ hoàn tất. Không có mã nào khác nên dựa vào nhiệm vụ đó. – Eric

Trả lời

13

Chỉ cần đặt mã mà bạn muốn thực thi sau khi Biến được thay đổi trong hàm và gọi hàm này từ onPostExecute.

+1

Đó không phải là mã hóa rõ ràng! –

37

Nếu bạn phụ thuộc vào kết quả của AsyncTask, bạn có thể thực hiện việc này.

Object result = asyncTask.execute().get(); 

Loại kết quả là kiểu trả về trong phương thức doInBackground() của bạn. Nhưng sau đó chủ đề chính của bạn sẽ được chờ đợi cho đến khi nhiệm vụ hoàn tất.

+0

Cảm ơn bạn! Đó chính xác là những gì tôi đang tìm kiếm. – PeteH

+4

Nhưng nếu bạn làm điều đó bạn sẽ chặn chủ đề chính. Điều đó không thể tưởng tượng được. – adalPaRi

+0

adalPaRi, trừ khi đó là màn hình giật gân? –

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