Вход в систему с общими предпочтениями

Я пытаюсь сохранить учетные данные для входа в систему на одном экране (login.java) и пытаюсь получить это при входе пользователя в систему и пытаюсь получить его при другой активности (loggedin.java), но этого не происходит.

login.java
 b1.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {

            {
                SharedPreferences pref = getApplicationContext().getSharedPreferences("Mypref", 0);
                SharedPreferences.Editor editor = pref.edit();

                {
                    editor.putString("email", e1.getText().toString());
                    editor.putString("password", e2.getText().toString());
                    editor.commit();
                    String email = pref.getString("email", null);
                    t.setText(email);
                    //Log.e("email",email);
                }
            }



loggedin.java
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.accinfo);
    t1 = (TextView) findViewById(R.id.textView3);
    t2 = (TextView) findViewById(R.id.textView4);
    SharedPreferences pref = getSharedPreferences("MYPref", 0);
    String email = pref.getString("email", null);
    String password = pref.getString("password", null);
    t1.setText(email);
    t2.setText(password);
}}

вывод идет NULL, вместо учетных данных пользователей

3 ответа

Решение

Вы должны помнить имена, которые вы даете, поскольку это чувствительно к регистру.

MYPref - Mypref

У вас есть два разных имени, когда вы вызываете SharedPreferences, проверяете строки и, возможно, используете глобальную переменную, чтобы не пропустить ввод:)

MYPref - Mypref

В любом случае, если вам нужно использовать их во всем приложении, вы можете создать класс (файл.java) и использовать статические значения, например:

public class LoggedUser{
    public static String email;
    public static String password;

    //getters and setters

}

Если вы назначите им значение при входе пользователя в систему, они будут заполнены по всему приложению, не вызывая каждый раз sharedPrefs

Простое и элегантное решение - использовать очень простую библиотеку TinyDB в Android, которая является не чем иным, как абстракцией над общими настройками.

Вы можете инициализировать его в своей деятельности onCreate() метод как это:

TinyDB tinydb = new TinyDB(this);

И затем используйте это так:

tinydb.putString("userName", "john");
String currentUser = tinydb.getString("userName");

Надеюсь, поможет.

Другие вопросы по тегам