Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查共享首选项中是否存在密钥_Android_Sharedpreferences - Fatal编程技术网

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

Android 检查共享首选项中是否存在密钥,android,sharedpreferences,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 = p

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

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);
一旦创建,我想在一组新的文本视图中显示这些值,但是第一次我没有任何值存储在共享首选项中,并且将得到一个空指针异常


我想知道是否有任何内置方法可以检查SharedReferences是否包含任何值,这样我就可以检查该键是否存在,如果不存在,然后用preferences值替换新的TextView集

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

preferences = getSharedPreferences("text", 0);
String value = preferences.getString("unknown_key",null);
if (value == null) {
    // the key does not exist
} else {
    // handle the value
}
试用

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

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

    }
根据Javadocs,尝试
contains(字符串键)

检查首选项是否包含首选项。如果 首选项存在于首选项中,否则为false


这是正确的,但如果键存在,但值为空/null,该怎么办?示例:尽管这是公认的答案,但我很确定作者真正想要的是
preferences.contains(“unknown_key”)。。。例如,如果您有一个布尔首选项,那么它可以是true或false;如果您给出一个默认值,它将返回如果它不存在,即使这可能是一个实际的可能值,因此它实际上不会告诉您首选项是否存在。误导性回答-实际上
prefsEditor.putString(“现在键存在”,null).commit()
是完全合法的,密钥存在,值为null--1如果我想检查int值,该怎么办?请添加一些上下文来说明此代码的工作原理。使答案更好、更有用。谢谢!:)
    LoadRuns();
if (loadedruns == 1) {
Toast.makeText(MainActivity.this, "First run", Toast.LENGTH_SHORT).show(); 
}
else {
Toast.makeText(MainActivity.this, "No. runs: " + loadedruns,
Toast.LENGTH_SHORT).show();
}
loadedruns++;
SaveRuns("runs", loadedruns);


    public void SaveRuns(String key, int value){
sharedPreferences =  PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.commit();
}
public void LoadRuns(){
sharedPreferences =  PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
loadedruns = sharedPreferences.getInt("runs", 1);
}