Android: SharedPreferences 默认值 String

Android: SharedPreferences default value of a String

我搜索了很多问题,但没有找到能回答我问题的问题。所以我开始了:我为我的 运行 作为启动器 activity 的应用程序锁定了自定义 PIN Activity。这是我在 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{}

但每当我第一次 运行 应用程序(或清除所有应用程序数据)时,应用程序都会跳过这块代码并直接进入 "enter your saved PIN" 部分(图 1)。在我用这个

输入任何 PIN 之前,我使用 Log.i 检查它赋予密钥 ("pin") 的值
Log.i("SECURITY", "PINs dont match Saved one is: " + sharedPinDatabase.getString("pin", "") + "entered is : " + etPinInput.getText().toString());

我从这段代码中得到的是 "PINs dont match Saved one is: entered is :" 如果我在不输入任何数字的情况下按下 "OK"(将 EditText 留空),它会工作并转到下一个 Activity。 同样在应用程序的设置部分,我做了这个(点击时 运行)

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

当你输入 sharedPinDatabase.getString("pin", "NO PIN SAVED").equals("") 时 - 如果之前没有保存 PIN,它不会 return "",但会 return "NO PIN SAVED" (因为这是您提供的默认数据)。

只需将其更改为 sharedPinDatabase.getString("pin", "").equals("") - 就可以了。

小提示(为了以后)。
如果您使用 ""..equals(sharedPinDatabase.getString("pin", "")) 而不是 sharedPinDatabase.getString("pin", "").equals("") - 当 sharedPinDatabasenull.

时,您将避免 NullPointerException