Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Put multiple parameters to ContentResolver.requestSync

i'm making an app that has a syncAdapter.

i wish to be able to do a requestSync together with some parameters that will be sent via its bundle . the reason is that i wish to choose what the syncAdapter instance would do .

for some reason , both putSerializable and putIntArray causes the ContentResolver to throw an exception :

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 
...

why does it happen? is there a way to overcome this ? putting an integer worked fine yet those operations didn't.

am i doing something wrong ? is there a better way to achieve sending parameters to the syncAdapter from an activity ?

like image 442
android developer Avatar asked Aug 16 '12 11:08

android developer


1 Answers

ContentResolver.requestSync says:

Only values of the following types may be used in the extras bundle: Integer Long Boolean Float Double String

in that case you could try:

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]);
} 

and then read those values in 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);
} 
like image 61
Selvin Avatar answered Sep 19 '22 16:09

Selvin