2012-01-06 55 views
31

我创建共享偏好如下安卓:检查是否在共享偏好存在价值

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); 

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

所以我想知道是否有任何内置的方法可以检查共享首选项是否包含任何值,以便我可以检查值是否存在,如果不存在,则更换新的集具有首选项值的TextViews。

回答

106

尝试contains(String key) Accorting到的Javadoc默认值,

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

+8

这应该被接受回答 – 2015-02-21 22:02:10

+2

同意,这是正确的答案 – smoothumut 2015-10-20 06:06:32

-1

为什么你不使用try-catch块?
如果您设置了值而不是NULL指针异常被抛出,您将向用户显示它们。否则,你将进入catch块来处理应用程序的第一次加载。 我知道这不是“内置的方法”,但会完成这项工作。
祝您有个愉快的一天!

+0

这does'n工作朋友...由于某种原因,它说没有关系去捕捉所有 – Vivekanand 2012-01-06 12:30:26

20

SharedPreferences获取值每一种方法都有它的情况下,返回键不存在

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

这是正确的,但如果键存在的,但值为空/空?示例: Kevin 2013-03-08 16:20:53

+49

尽管这是公认的答案,但我很确定作者*实际上在寻找什么是'preferences.contains(“unknown_key”);'' ...例如,如果你有一个布尔偏好显然它可以是真或假;如果你给出一个默认值,它将返回,如果它不存在,即使这可能是一个实际可能的值,所以它实际上不会告诉你该首选项是否存在。 – fatfreddyscat 2013-03-22 22:10:35

+2

误导的答案 - 实际上'prefsEditor.putString(“现在密钥存在”,null).commit();'是完全合法的,密钥存在和值为空 - -1 – 2013-05-02 18:53:46

9

试用

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

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

    } 
+0

很好的答案Richa – Android 2012-01-06 12:28:11

+0

如果我想检查int值? – 2016-09-28 09:37:43

0
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); 
} 
+0

请为此代码的工作原理添加一些上下文。使答案更好,更有用。谢谢! :) – Alex 2017-02-11 12:39:46