Нужна ли помощь при создании экрана входа в систему с помощью SharedPreferences?

У меня есть 2 действия, в одном из которых пользователь может обновить или установить новый пароль с помощью текстовых полей редактирования, называемых «Пароль», а другое действие — это экран входа в систему, где они должны ввести свой пароль, а затем он проверяется с использованием общих настроек, называемых «Вход». Активность пароля работает нормально. Я могу обновить или установить новые пароли без проблем, но активность входа в систему не сравнивается с введенным пользователем значением. Короче говоря, после того, как они установили свой пароль, когда они входят в систему, используя свой пароль, он говорит, что пароль неверен, а это не так. Я опубликовал обе активности.

public class Password extends Activity implements View.OnClickListener{


public static final String PASSWORD_PREF_KEY ="passwd";

private TextView messages;
private EditText pass1;
private EditText pass2;
Button button1, button2;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.mainin);

    messages = (TextView) findViewById (R.id.text1);
    pass1 = (EditText) findViewById(R.id.password);
    pass2 = (EditText) findViewById (R.id.password_confirm);

    button1 = (Button) findViewById(R.id.ok);
    button2 = (Button) findViewById(R.id.button1);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this); }


    public void onClick(View v){
        switch(v.getId()){
        case R.id.button1:
            startActivity(new Intent(Password.this,LogIn.class));  finish(); 
        case R.id.ok:
        String p1 = pass1.getText().toString();
        String p2 = pass2.getText().toString();

        if (p1.equals(p2)) {
            if (p1.length() >=6 || p2.length() >=6) {

                SharedPreferences settings = getSharedPreferences(Password.PASSWORD_PREF_KEY,0);
                SharedPreferences.Editor editor = settings.edit();   

                editor.putBoolean(Password.PASSWORD_PREF_KEY,true);    


                editor.commit();
                messages.setText("Password updated!");
            }
            else
                messages.setText("Passwords must be at least 6 characters");
        }
        else{
            pass1.setText("");
            pass2.setText("");
            messages.setText("Passwords do not match");
            }
        }
};      

public class LogIn extends Activity {

private EditText pass1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.password);

    pass1 = (EditText) findViewById(R.id.et_pw);

   SharedPreferences passwd =  getSharedPreferences(Password.PASSWORD_PREF_KEY,0);
   final String p3 = passwd.getString(Password.PASSWORD_PREF_KEY,null);
    final String p1 = pass1.getText().toString(); 

    Button page1 = (Button) findViewById(R.id.btn_login); 
    page1.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View view) { 
            if (p3.equals(p1)) {     
                startActivity(new Intent(LogIn.this,Main.class));  
                 } 
            else {     
                Toast.makeText(getApplicationContext(),"Incorrect Password",Toast.LENGTH_LONG).show();
                }
            };
            });
  };
    }

person Jonathan    schedule 03.08.2011    source источник


Ответы (1)


Похоже, вы помещаете логическое значение true в общие настройки вместо строки пароля. поэтому, когда вы сравниваете текстовую строку редактирования с общим предпочтением, они не будут равны друг другу.

person Pengume    schedule 03.08.2011
comment
вы говорите о editor.putBoolean(Password.PREF_KEY,true) правильно? на что мне нужно его поменять? - person Jonathan; 04.08.2011
comment
Что ж, ваша логика сейчас заключается в том, что вы указываете true в настройках, когда они вводят новый пароль. это нормально, если вы должны были проверить, создали ли они пароль, однако вам нужно проверить, совпадают ли пароли. Поэтому вместо этого поместите editor.putString(Password.PASSWORD_PREF_KEY,p1); это хорошо сохраните пароль в виде строки. - person Pengume; 04.08.2011
comment
я изменил его на editor.putString(Password.PASSWORD_PREF_KEY,p1); как вы предложили, но я все еще получил неверный пароль:/ - person Jonathan; 04.08.2011
comment
попробуйте зарегистрировать две строки, чтобы убедиться, что они действительно не равны друг другу. - person Pengume; 04.08.2011
comment
в нем говорится, что если я его отлаживаю, p3 не может быть разрешен, а p1 не может быть разрешен в переменную - person Jonathan; 04.08.2011
comment
pass1.getText.toString() говорит, что это = jonathan, что правильно, но строка p1 говорит, что ее нельзя преобразовать в переменную, а getSharedPreferences(Password.PASSWORD_PREF_KEY,0); говорит mMap = {passwd=jonathan}, но для SharedPreferences passwd, passwd = null. - person Jonathan; 04.08.2011
comment
Я понял, что мне нужно сделать, и все заработало идеально. Ваш ответ очень помог, спасибо! - person Jonathan; 04.08.2011