我正在创建一个具有syncAdapter的应用。
我希望能够与一些将通过其捆绑发送的参数一起执行requestSync。原因是我希望选择syncAdapter实例会做什么。
由于某种原因,putSerializable和putIntArray都会导致ContentResolver抛出异常:
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
...
为什么会这样?有没有办法克服这个?把一个整数运行正常,但那些操作没有。
我做错了什么?有没有更好的方法来实现从活动向syncAdapter发送参数?答案 0 :(得分:8)
在extras包中只能使用以下类型的值: 整数 长 布尔 浮动 双 串
在这种情况下你可以尝试:
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]);
}
然后在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);
}