ate*_*iob 32 android bundle sharedpreferences
我试图创建一个辅助方法,以一般方式迭代所有Bundle对象.
"通用"我的意思是:
到目前为止,我想出了以下大纲来实现这一目标:
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.
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法有意义吗?
有没有更好的方法来实现这一目标?
Dan*_*iel 70
你可以使用toString()方法将所有内容保存为String吗?不知道原始类型是否映射到它们的Object等价物(例如int到类Integer),但如果它们是,那么你可能会做这样的事情,而不是费力地检查每个可能的类.
for (String key : bundle.keySet()) {
saveKeyValueInPrefs(key, bundle.get(key).toString()); //To Implement
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否适合您的需求,但我正在尝试做类似的事情,现在将一个包转换为JSON字符串.
如果我真的要这么做的话,我会通过反思来做到这一点。存储一个静态映射,以便 String.class 映射到 SharedPreference.putString() 等。然后,当您循环遍历项目时,根据映射检查它们的类。如果它不存在,请检查超类等。这将为您提供正确的调用方法,或者让您知道所请求的对象的类型不能放入首选项中。
所以基本算法是:
注意:反射速度并不快,而且也不是最容易编码和维护的事情。如果可能的话,我建议找到一种适合您的用例的不太通用的方法。
| 归档时间: |
|
| 查看次数: |
16647 次 |
| 最近记录: |