5

我正在制作一个具有同步适配器的应用程序。

我希望能够与将通过其捆绑发送的一些参数一起执行 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 
...

为什么会这样?有没有办法克服这个?放一个整数工作正常,但这些操作没有。

难道我做错了什么 ?有没有更好的方法来实现从活动向同步适配器发送参数?

4

1 回答 1

8

ContentResolver.requestSync 说:

在 extras 包中只能使用以下类型的值: Integer Long Boolean Float Double String

在这种情况下,您可以尝试:

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);
} 
于 2012-08-16T13:38:20.453 回答