我搜索了很多问题,但我找不到能解决问题的问题。所以我在这里:我为我的应用程序创建了一个自定义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):
答案 0 :(得分:3)
当你放sharedPinDatabase.getString("pin", "NO PIN SAVED").equals("")
时 - 如果之前没有保存个人识别码,它将不会返回""
,但会返回"NO PIN SAVED"
(因为这是您提供的默认数据)。<登记/>
只需将其更改为sharedPinDatabase.getString("pin", "").equals("")
- 就可以了。
小提示(将来)
如果您使用""..equals(sharedPinDatabase.getString("pin", ""))
而不是sharedPinDatabase.getString("pin", "").equals("")
- 如果sharedPinDatabase
为null
,您将避免NullPointerException。