Tôi có một số lớp con Hoạt động trong dự án của mình, mỗi lớp gọi một dịch vụ web dựa trên SOAP, xử lý và hiển thị kết quả. Soạn SOAP, xử lý cuộc gọi và phân tích kết quả thành các đối tượng POJO khác nhau được đóng gói trong lớp MyWebService. Lớp này thực thi (các) cuộc gọi dịch vụ web thực tế thông qua AsyncTask.Mẫu để sử dụng lại Android AsnycTask qua một số Hoạt động?
Để có thể trả lại kết quả cho lớp con Hoạt động gọi, tôi đã xác định rằng tất cả các hoạt động này nên triển khai giao diện WebServiceResultProcessor, xác định một hàm duy nhất (processWebServiceResults) hoạt động như gọi lại cho AsyncTask, được gọi từ onPostExecute .
Tôi cũng muốn hiển thị ProgressDialog trong khi gọi dịch vụ web. Và đây là câu hỏi của tôi. Để có thể hiển thị ProgressDialog (hoặc từ MyWebService hoặc AsyncTask), tôi cần chuyển tham chiếu đến Context của Activity của người gọi. Và để có thể thực hiện chức năng gọi lại từ AsyncTask, tôi cũng cần phải vượt qua cùng một tham chiếu đối tượng, nhưng lần này là một WebServiceResultProcessor. Điều này dường như với tôi một mùi mã, đi qua cùng một đối tượng hai lần, nhưng không thể nhìn thấy bất kỳ cách nào xung quanh đó. Thay vì giao tiếp, tôi có thể tạo một lớp cơ sở mới, mở rộng lớp Activity và thực thi thừa kế từ lớp mở rộng, nhưng điều đó có nghĩa là tôi sẽ loại trừ ListActivity và các thích sử dụng lớp MyWebService này.
Có cách nào tốt hơn để thực hiện việc này không?
Liệu WebServiceResultProcessor của bạn mở rộng Context/Hoạt động? –
@HeikoRupp no, và tôi có lẽ muốn giữ nó theo cách đó. –