-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()); 

и то, что я получаю от этого куска кода «PINs DonT соответствует Сохранен один является: введено: « И если я нажму« ОК », не набрав ни одного номера (оставив EditText blank), он будет работать и переходит к следующему действию. Кроме того, в настройках части приложения я сделал это (для запуска на 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); 

И по какой-то причине она работает (при установке значения строки в «») и получает меня к нужному экрану (тот, который я сделал для первого запуска приложения) это один (Picture2):

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("") - вы избежите исключения NullPointerException в случае, если sharedPinDatabase - null.

Смежные вопросы