共享首选项被读取为错误类型

时间:2018-02-12 22:32:25

标签: android sharedpreferences

我正在启动时在我的应用程序中阅读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(); } }

1 个答案:

答案 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)方法   将此活动的类名称作为首选项名称传递。

我经常使用这两种方法中的一种,到目前为止没有任何问题。