2012-01-06 60 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