-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。

相關問題