检查共享首选项中是否存在密钥

Viv*_*and 42 android sharedpreferences

我正在创建共享首选项,如下所示

preferences = getSharedPreferences("text", 0);
final Editor editor = preferences.edit();

String s1 = serverIP.getText().toString();
String s2 = serverPort.getText().toString();
String s3 = syncPass.getText().toString();
String s4 = proxyServer.getText().toString();
String s5 = proxyPort.getText().toString();

editor.putString("SERVERIP", s1);
editor.putString("SERVERPORT", s2);
editor.putString("SYNCPASS", s3);
editor.putString("PROXYSERVER", s3);
editor.putString("PROXYPORT", s3);
Run Code Online (Sandbox Code Playgroud)

和onCreate我想在一组新的TextViews中显示值,但是第一次我没有在共享首选项中存储任何值,并且会得到一个NULL指针异常.

我想知道是否有任何内置方法可以检查SharedPreferences是否包含任何值,以便我可以检查密钥是否存在,如果不存在,则将新的TextViews集替换为首选项值.

Jos*_*a G 131

试试contains(String key)Accaving到Javadocs,

检查首选项是否包含首选项.如果首选项中存在首选项,则返回true,否则返回false.


Moj*_*sin 21

每个获取值的方法SharedPreferences都有默认值,如果该键不存在则返回该值

preferences = getSharedPreferences("text", 0);
String value = preferences.getString("unknown_key",null);
if (value == null) {
    // the key does not exist
} else {
    // handle the value
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管这是可接受的答案,但我很确定作者*实际*正在寻找的是`preferences.contains("unknown_key");`...例如,如果你有一个布尔偏好,显然它可以是真还是假; 如果你给出一个默认值,它将返回如果它不存在,即使它可能是一个实际可能的值,所以它实际上不会告诉你是否存在首选项. (51认同)
  • 误导性答案 - 实际上是`prefsEditor.putString("现在键存在",null).commit();`完全合法,键存在且值为null - -1 (3认同)

Ric*_*cha 10

试用

 SharedPreferences shf = getSharedPreferences("NAME_SharedPref", MODE_WORLD_READABLE);
    String strPref = shf.getString("SERVERIP", null);

    if(strPref != null) {
    // do some thing

    }
Run Code Online (Sandbox Code Playgroud)