Android:SharedPreferences字符串的默认值

时间:2016-04-26 21:25:37

标签: android database sharedpreferences android-sharedpreferences

我搜索了很多问题,但我找不到能解决问题的问题。所以我在这里:我为我的应用程序创建了一个自定义PIN锁定活动,作为LAUNCHER活动运行。这是我在onCreate()方法中使用的代码,用于检查这是否是应用程序的第一次运行(为了运行相应的代码并为用户提供设置其PIN的机会)

 if (sharedPinDatabase.getString("pin", "NO PIN SAVED").equals("")) {
        Log.i("SECURITY", "NO PIN SAVED");
        tvInstructionsPin.setText(" It appers that you havent saved a PIN. Enter new PIN below.");        
    }else{}

但每当我第一次运行应用程序(或清理所有应用程序数据)时,应用程序会跳过这段代码并直接进入"输入您保存的PIN" part(图1)。我使用Log.i检查在输入任何PIN之前给键的值(" pin")

Log.i("SECURITY", "PINs dont match Saved one is: " + sharedPinDatabase.getString("pin", "") + "entered is : " + etPinInput.getText().toString());

我从这段代码中获得的是" PIN码不匹配已保存的是:输入的是:" 如果我按" OK"没有输入任何数字(将EditText留空)它可以工作并转到下一个Activity。 同样在应用程序的设置部分我做了这个(在onClick上运行)

  SharedPreferences sharedPrefWrite = getContext().getSharedPreferences("PIN_PREFS_DATABASE", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPrefWrite.edit();
    editor.putString("pin", "").commit();
    Intent i = new Intent(getActivity(), LockScreen.class);
    startActivity(i);

由于某种原因,它可以工作(当将字符串的值设置为"")并让我进入所需的屏幕(我为第一次运行应用程序而制作的屏幕) 这一个(图2):

enter image description here

1 个答案:

答案 0 :(得分:3)

当你放sharedPinDatabase.getString("pin", "NO PIN SAVED").equals("")时 - 如果之前没有保存个人识别码,它将不会返回"",但会返回"NO PIN SAVED"(因为这是您提供的默认数据)。<登记/>
只需将其更改为sharedPinDatabase.getString("pin", "").equals("") - 就可以了。

小提示(将来) 如果您使用""..equals(sharedPinDatabase.getString("pin", ""))而不是sharedPinDatabase.getString("pin", "").equals("") - 如果sharedPinDatabasenull,您将避免NullPointerException。