5

Tworzę aplikację z syncAdapter.Umieść wiele parametrów w ContentResolver.requestSync

Chciałbym móc wykonać requestSync wraz z parametrami, które będą wysyłane przez jego pakiet. Powodem jest to, że chciałbym wybrać to, co zrobiłaby instancja syncAdapter.

z jakiegoś powodu, zarówno putSerializable i putIntArray powoduje ContentResolver rzucić wyjątek:

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

dlaczego tak się dzieje? czy istnieje sposób na pokonanie tego? wprowadzenie liczby całkowitej działało dobrze, ale te operacje nie.

Czy robię coś nie tak? czy istnieje lepszy sposób na uzyskanie parametrów wysyłania do syncAdapter z działania?

+1

z doc: 'Tylko wartości mogą być używane dodatkami następujących typów zestawie: Integer, długi, Boolean, pływak, dwukrotnie, Ciąg '... wstaw coś w stylu' arrc' z długością tablicy, a następnie 'arr0' na' arrn' gdzie 'n' =' arrc' - 1 – Selvin

+0

czy możesz podać link do dokumentu? również, proszę podaj swoją odpowiedź w poście, abym mógł na nią zagłosować, i proszę wyjaśnij więcej o swojej sugestii ... –

Odpowiedz

8

ContentResolver.requestSync mówi:

tylko wartości mogą być używane dodatkami następujących typów bundle: Integer Długi Boolean Float Pokój String

w takim przypadku mogłaby spróbuj:

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

a następnie odczytać te wartości w 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 teraz rozumiem. dzięki . w moim przypadku chciałem przekazać enumSet, więc dopóki nie napisałeś rozwiązania, użyłem ciągu oddzielonego przez ",". Myślę, że twoje rozwiązanie nadal by działało, prawda? –

+0

tak, ale twoja shuold też będzie dobra ... i myślę, że twoje rozwiązanie zajmuje mniej pamięci niż moje :) – Selvin

+0

myślisz? ok, użyję mojego, choć twoje rozwiązanie jest całkiem dobre. –