11

Tôi có nhà cung cấp nội dung tùy chỉnh trong ứng dụng Android hoạt động khá tốt. Tôi hy vọng các ứng dụng khác cũng có thể truy cập vào nhà cung cấp nội dung của tôi. Tôi muốn một số cách sạch sẽ để giao tiếp ngoại lệ và lỗi, nhưng theo như tôi có thể nói khuôn khổ nhà cung cấp nội dung Android không cung cấp bất kỳ cách nào để truyền bá ngoại lệ trên các quy trình.Xử lý ngoại lệ (cross-process) trong nhà cung cấp nội dung tùy chỉnh Android

Tôi nên chỉ định trạng thái ngoại lệ cho người gọi của mình như thế nào? Tôi phải bằng cách nào đó mã hóa nó vào dữ liệu trả về của tôi và dựa vào khách hàng để kiểm tra nó? Có cách nào khác không? Nếu mã hóa vào dữ liệu trả về thông thường là nó, cách tốt nhất là gì? (Tôi có thể thấy một số lựa chọn thay thế cho Cursor trả về bởi một cuộc gọi query, nhưng những gì về Uri trả về bởi insert, hoặc int trả về bởi update hoặc delete?)

+0

Khi bạn thử tăng một số loại 'RuntimeException' từ' ContentProvider', điều gì đã xảy ra? – CommonsWare

+0

Sử dụng 'ContentProviderClient',' truy vấn' và 'chèn' cả hai đều trả về' null' khi nhà cung cấp đưa ra một 'RuntimeException'. Trong logcat, tôi có thể thấy một thông báo có thẻ 'JavaBinder':' *** Không loại trừ ngoại lệ từ xa! (Các ngoại lệ chưa được hỗ trợ trên các quy trình.) ' –

Trả lời

14

Có một danh sách ngắn của RuntimeException lớp con mà, nếu được ném vào nhà cung cấp, sẽ được đưa lại trong ứng dụng khách. Đó là:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException

Nguồn: Creating Content Providers đề cập IAENPE; Tôi đoán rằng những người khác sẽ làm việc dựa trên the Javadoc forParcel.writeException.

Ứng dụng khách sẽ chỉ nhận được thông báo chi tiết chứ không phải theo dõi ngăn xếp hoặc ngăn xếp nguyên nhân. Đối với trạng thái ngoại lệ có thể được mã hóa thành String (thông báo chi tiết), đây là một lựa chọn hợp lý.

Tôi vẫn quan tâm đến các giải pháp khác.

+0

Tôi đã kết thúc bằng [org.json package] của Android (http://developer.android.com/reference/org/json/package-summary.html) để mã hóa dữ liệu thành thông báo chi tiết về 'IllegalStateException' và cung cấp API cho khách hàng dịch bằng cách sử dụng sự phản chiếu vào các lớp 'Ngoại lệ' khác. –

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