5

syncAdapterを備えたアプリを作成しています。

バンドルを介して送信されるいくつかのパラメーターと一緒に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にパラメータを送信するためのより良い方法はありますか?

4

1 に答える 1

8

ContentResolver.requestSync は次のように述べています。

エクストラバンドルで使用できるのは、次のタイプの値のみです。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 に答える