我正在启动时在我的应用程序中阅读SharedPreferences,经过几次运行后它会崩溃并告诉我我正在尝试从String转换为布尔值。下面是我用来读写这个值的代码。
df_a <- data.frame(id = 1:10,
dg_a = c(T, T, T, F, F, F, T, T, F, T),
dg_b = c(F, F, F, F, T, T, F, T, T, F))
df_b <- data.frame(id = 1:10,
dg_a = c(F, F, F, T, F, F, F, T, T, T),
dg_b = c(F, T, T, F, F, T, F, T, F, F))
library(dplyr)
library(tidyr)
df_a %>% gather(key = "key", value = "val", -id) %>%
bind_rows(gather(df_b, key = "key", value = "val", -id )) %>%
group_by(id, key) %>%
summarise(val = ifelse(sum(val == TRUE) > 0, TRUE, FALSE)) %>%
spread(key, val) %>% as.data.frame()
# Result
# id dg_a dg_b
# 1 1 TRUE FALSE
# 2 2 TRUE TRUE
# 3 3 TRUE TRUE
# 4 4 TRUE FALSE
# 5 5 FALSE TRUE
# 6 6 FALSE TRUE
# 7 7 TRUE FALSE
# 8 8 TRUE TRUE
# 9 9 TRUE TRUE
# 10 10 TRUE FALSE
两个奇怪的事情是它不会在几个版本中开始发生,到目前为止它只发生在模拟器上。我还没有能够检查一个物理设备,但是我已经运行了这个代码而没有变化几个月并没有遇到任何麻烦。
为什么我会收到此消息?
// Checks if the realm has been copied to the device, and copies it if it hasn't.
private void copyRealm() {
final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if (!sharedPreferences.getBoolean(getString(R.string.pref_copied), false)) {
// Copy the realm to device.
final String path = copyBundledRealmFile(getResources().openRawResource(R.raw.realm), getString(R.string.realm_name));
// Save the path of the realm, and that the realm has been copied.
sharedPreferences.edit()
.putBoolean(getString(R.string.pref_copied), true)
.putString(getString(R.string.pref_path), path)
.apply();
}
}
?
答案 0 :(得分:-2)
看一下这个问题Android getDefaultSharedPreferences。
使用
似乎更好SharedPreferences preferences = getPreferences(MODE_PRIVATE);
或
SharedPreferences references1=getSharedPreferences("some_name",MODE_PRIVATE);
而不是使用
SharedPreferences preferences= getDefaultSharedPreferences(this);
来自文档:
getPreferences(MODE_PRIVATE)检索SharedPreferences对象 访问此活动专用的首选项。这很简单 通过调用底层的getSharedPreferences(String,int)方法 将此活动的类名称作为首选项名称传递。
我经常使用这两种方法中的一种,到目前为止没有任何问题。