5

Estoy haciendo una aplicación que tiene un adaptador de sincronización.Poner varios parámetros en ContentResolver.requestSync

deseo poder hacer un requestSync junto con algunos parámetros que serán enviados a través de su paquete. la razón es que deseo elegir qué haría la instancia de syncAdapter.

por alguna razón, tanto putSerializable y putIntArray hace que el ContentResolver a lanzar una excepción:

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

¿Por qué sucede? Hay una manera de superar esto ? poner un número entero funcionó bien, pero esas operaciones no funcionaron bien.

¿estoy haciendo algo mal? ¿hay una mejor manera de lograr el envío de parámetros al syncAdapter desde una actividad?

+1

de doc: 'Sólo los valores de los siguientes tipos pueden ser utilizados en los extras paquete: Entero, largo, de Boole, flotador, doble, String' ... pon algo como 'arrc' con una matriz de longitud y luego' arr0' a 'arrn' donde' n' = 'arrc' - 1 – Selvin

+0

puedes poner el enlace de los documentos? también, por favor ponga su respuesta en una publicación para que yo pueda votar, y por favor explique más sobre su sugerencia ... –

Respuesta

8

ContentResolver.requestSync dice:

Sólo los valores de los siguientes tipos pueden ser utilizados en los extras paquete: Entero largo booleana flotador doble cadena

en ese caso usted podría Prueba:

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

y luego leer esos valores en 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 ahora lo entiendo. Gracias . en mi caso, quería pasar un enumSet, así que hasta que escribiste la solución, he usado una cadena separada por ",". Creo que tu solución aún funcionaría para eso también, ¿verdad? –

+0

sí, pero el tuyo también será bueno ... y creo que tu solución consume menos memoria que la mía :) – Selvin

+0

¿crees? vale, usaré el mío, aunque tu solución también es bastante buena. –

Cuestiones relacionadas