5

Tôi đang tạo một ứng dụng có một syncAdapter.Đặt nhiều thông số cho ContentResolver.requestSync

tôi muốn có thể thực hiện requestSync cùng với một số thông số sẽ được gửi qua gói của nó. lý do là tôi muốn chọn ví dụ syncAdapter sẽ làm gì.

đối với một số lý do, cả hai putSerializable và putIntArray làm cho ContentResolver để ném một ngoại lệ:

08-16 14:34:49.080: E/AndroidRuntime(10318): java.lang.IllegalArgumentException: unexpected value type: java.util.MiniEnumSet 
08-16 14:34:49.080: E/AndroidRuntime(10318): at android.content.ContentResolver.validateSyncExtrasBundle(ContentResolver.java:1144) 
08-16 14:34:49.080: E/AndroidRuntime(10318): at android.content.ContentResolver.requestSync(ContentResolver.java:1111) 
08-16 14:34:49.080: E/AndroidRuntime(10318): at com.sciatis.syncer.syncing.SyncAdapter.requestSync(SyncAdapter.java:100) 
08-16 14:34:49.080: E/AndroidRuntime(10318): at 
... 

tại sao nó xảy ra? có cách nào để vượt qua điều này không? đặt một số nguyên làm việc tốt nhưng những hoạt động đó không.

Tôi đang làm gì sai? có cách nào tốt hơn để đạt được các tham số gửi đến syncAdapter từ một hoạt động?

+1

từ doc: 'Chỉ giá trị của các loại sau đây có thể được sử dụng trong các tính năng bổ sung gói: Integer, Long, Boolean, phao, đôi, String' ... đặt thứ gì đó như 'arrc' với chiều dài mảng và sau đó' arr0' thành 'arrn' trong đó' n' = 'arrc' - 1 – Selvin

+0

bạn có thể đặt liên kết của tài liệu không? Ngoài ra, xin vui lòng đặt câu trả lời của bạn trong một bài viết để tôi có thể bỏ phiếu cho nó, và xin vui lòng giải thích thêm về đề xuất của bạn ... –

Trả lời

8

ContentResolver.requestSync nói:

Chỉ giá trị của các loại sau đây có thể được sử dụng trong các tính năng bổ sung gói: Integer dài Boolean nổi đúp Chuỗi

trong trường hợp đó bạn có thể thử:

Bundle extras = new Bundle(); 
int[] arr = new int[] {1,2,3,4}; 
extras.putInt("arrlen", arr.length); 
for (int i = 0; i < arr.length; i++) { 
    extras.putInt("arr"+ i, arr[i]); 
} 

và sau đó đọc những giá trị trong SyncAdapter:

Bundle extras; //taken from method params 
int[] arr = new int[extras.getInt("arrlen")]; 
for (int i = 0; i < arr.length; i++) { 
    arr[i] = extras.getInt("arr"+ i); 
} 
+0

oh bây giờ tôi hiểu. cảm ơn . trong trường hợp của tôi, tôi muốn vượt qua một enumSet, vì vậy cho đến khi bạn đã viết giải pháp tôi đã sử dụng một chuỗi được phân cách bởi ",". tôi nghĩ rằng giải pháp của bạn vẫn sẽ làm việc cho nó quá, phải không? –

+0

vâng, nhưng của bạn shuold được tốt, quá ... và tôi nghĩ rằng giải pháp của bạn tiêu thụ ít bộ nhớ hơn tôi :) – Selvin

+0

bạn nghĩ sao? ok, tôi sẽ sử dụng của tôi, mặc dù giải pháp của bạn là khá tốt quá. –