Những gì chúng ta đã làm trong dự án cuối cùng của chúng tôi: Tạo một Wrapper chứa một chung và một excpetion như thế này:
public class AsyncTaskResult<T> {
private final T result;
private final Exception error;
//getter & setter
}
Catch tất cả các trường hợp ngoại lệ trong doInBackground(...)
của bạn và đóng gói chúng vào wrapper kết quả (hoặc kết quả nếu không có lỗi). Trong giao diện người dùng của bạn, hãy kiểm tra trình bao bọc nếu đó là ngoại lệ, sau đó hiển thị theo thông báo lỗi, nếu không thì hãy điền vào các trường có kết quả. Đối với chúng tôi nó cũng là thực hành tốt để xác định những loại ngoại lệ duy nhất, có (ví dụ như ngoại lệ với một lỗi có thể phục hồi mà bạn chỉ hiển thị một hộp thoại hoặc một lỗi ứng dụng mà bạn cần phải kick người dùng vào menu chính). và chỉ ném các loại này (bắt được cụ thể trong asynctask của bạn), vì vậy bạn không phải bận tâm với hàng trăm trường hợp ngoại lệ khác nhau và cũng trừu tượng xử lý lỗi của bạn. Bạn cũng có thể cung cấp các khóa String với thông báo lỗi I18n chính xác để bạn chỉ phải viết e.getMessage()
Bạn đã bao giờ nhận được bất kỳ đâu với điều này? Tôi đang chạy vào cùng một vấn đề bây giờ mà tôi không có giá trị trả về từ 'AsyncTask'' doInBackground' nữa để kiểm tra. – theblang
Tôi sử dụng câu trả lời for3st. – Malachiasz