如何确定电话的SharedPreferences中是否包含值

时间:2018-07-17 18:10:46

标签: android sharedpreferences

我最近一直在开发一个android应用,其中新用户必须输入特定的密钥才能登录。在他插入该密钥时,该密钥已保存在手机的“共享首选项”中,因此他无需再次登录。

我的问题是我想检查用户是否是新用户,换句话说,检查“共享首选项”中是否有一个名为“ Key”的值,以便该应用程序直接将其引导至主菜单。

我希望我能清楚地解释这个问题。

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式执行此操作 第一种方式

 SharedPreferences pref =getSharedPreferences("yourPrefName",MODE_PRIVATE);
 if(pref.contains("YourKey"){
// key is exist
}else{
//  key not  exist
}

第二种方式
如果您具有任何唯一信息,例如每个用户的ID 和ID,则不可能是 -1

之类的值

因此您可以执行此操作以检查用户是否已登录

SharedPreferences pref =getSharedPreferences("yourPrefName",MODE_PRIVATE);

 // getInt(key,defualtValue) method accept two value 
 // key : name key in sharefPrefrance
 // defualtValue: if the key does not exist the method will return this defualtValue 
 int id= pref.getInt("id",-1);

 if(id!=-1)
 // user is login and have id 

答案 1 :(得分:1)

SharedPreferences具有

  

包含(字符串键)

方法。用它来检查是否存在使用您给定密钥的条目。

SharedPreferences prefs = context.getSharedPreferences("SharedPref_Name", Context.MODE_PRIVATE);
if(pref.contains("Key"){
  String deviceToken = prefs.getString("Key", null);
}else{
  // New User
}

或使用

  

getAll()

android.content.SharedPreferences的方法。

Map<String, ?> map = context.getSharedPreferences("SharedPref_Name", Context.MODE_PRIVATE).getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
    // entry.getValue().toString() will give the key. check it against the key that you want.
}

科特林

val prefs = context?.getSharedPreferences("SharedPref_Name", Context.MODE_PRIVATE)
        if(prefs?.contains("Key")!!){
                    val deviceToken = prefs.getString("Key", null);
                }

 (context?.getSharedPreferences("",Context.MODE_PRIVATE))?.all?.forEach {
 //access key using it.key & value using it.value
 Log.d("Preferences values",it.key() + ": " + it.value()             

}