5

我正在製作一個具有syncAdapter的應用程序。將多個參數放到ContentResolver.requestSync中

我希望能夠做一個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發送參數?

+1

從DOC:'以下類型的可在額外使用的只有值捆綁: 整數, 龍, 布爾, 浮動, 雙人, String' ...把​​數組長度放在'arrc',然後'arr0'放到'arrn'中,其中'n' ='arrc' - 1 – Selvin 2012-08-16 12:19:43

+0

你可以把文檔的鏈接放在哪?另外,請把你的答案放在一個帖子中,以便我可以投票,並請解釋更多關於你的建議...... – 2012-08-16 12:50:26

回答

8

ContentResolver.requestSync說:

以下幾種可能的額外使用的只有價值捆綁: 整數 龍 布爾 在這種情況下,你可以浮法 雙 字符串

嘗試:

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); 
} 
+0

哦,現在我明白了。謝謝 。在我的情況下,我想傳遞一個枚舉集,所以直到你寫出解決方案,我用了一個由「,」分隔的字符串。我認爲你的解決方案仍然適用於它,對吧? – 2012-08-16 13:43:15

+0

是的,但你的shuold也很好,我認爲你的解決方案消耗的內存比我的少:) – Selvin 2012-08-16 13:58:35

+0

你覺得呢?好吧,我會用我的,儘管你的解決方案也很好。 – 2012-08-16 14:05:30

相關問題