すべての Bundle オブジェクトを generic の方法で反復するヘルパーメソッドを作成しようとしています。
「ジェネリック」とは、次のことを意味します。
これまでのところ、それを達成するために次の概要を理解しています。
private void bundleToSharedPreferences(Bundle bundle) {
Set<String> keys = bundle.keySet();
for (String key : keys) {
Object o = bundle.get(key);
if (o.getClass().getName().contentEquals("int")) {
// save ints
}
else if (o.getClass().getName().contentEquals("boolean")) {
// save booleans
}
else if (o.getClass().getName().contentEquals("String")) {
// save Strings
}
else {
// etc.
}
}
}
このアプローチはまったく意味がありますか?
これを達成するためのより良い方法はありますか?
もしそうするなら、私は反射を通してそれをするでしょう。 String.classがSharedPreference.putString()などにマップするように静的マップを格納します。次に、アイテムをループしているときに、マップに対してクラスをチェックします。それが存在しない場合は、スーパークラスなどを確認してください。これにより、呼び出す適切なメソッドが提供されるか、要求されたオブジェクトのタイプが設定に含めることができないものであることが通知されます。
したがって、基本的なアルゴリズムは次のとおりです。
注:リフレクションは高速ではなく、コーディングと保守が最も簡単な方法ではありません。可能であれば、私はあなたのユースケースに合うあまり一般的ではない方法を見つけることをお勧めします。
ToString()メソッドを使用してすべてを文字列として保存できますか?プリミティブ型が同等のObjectにマップされているかどうか(たとえば、intからクラスIntegerへ)がわからない場合は、そうである場合、考えられる各クラスを手間をかけてチェックする代わりに、このようなことを実行できる可能性があります。
for (String key : bundle.keySet()) {
saveKeyValueInPrefs(key, bundle.get(key).toString()); //To Implement
}
これがあなたのニーズに合うかどうかはわかりませんが、私は今、バンドルをJSON文字列に変換するために同様のことをしようとしています。