-2

我搜索了很多问题,但我没有找到一个可以解决我的问题。所以我在这里:我为自己的应用程序做了一个自定义的PIN锁定活动,它作为LAUNCHER活动运行。这是我在onCreate()方法中使用的代码来检查,如果这是程序的第一个运行(为了运行相应的代码,让用户建立自己的PIN的机会)Android:SharedPreferences默认值的一个字符串

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”部分(图1)。我使用Log.i来检查值,则给予键(“PIN”)之前,我输入任何密码本

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

和我从这个块的代码得到的是“PIN码不匹配保存一个是:输入为:“ 如果我按下”确定“而不键入任何数字(将EditText留空),它将起作用并转到下一个活动。 另外在应用程序的设置部分我做了这个(在的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

回答

3

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

只需将其更改为sharedPinDatabase.getString("pin", "").equals("") - 它会起作用。

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

相关问题