Создание сеанса входа пользователя с помощью SharedPreferences - PullRequest
0 голосов
/ 19 сентября 2019

Прежде всего, позвольте мне указать, что я новичок в разработке для Android, и в этот самый момент я пытаюсь сохранить сеанс входа пользователя в систему, используя SharedPreferences и сделав немного, чтобы создать себе класс SessionManager, чтобы справиться с этим, я не получилошибка в любом случае, но каждый раз, когда я входил в систему, я снова быстро перенаправляюсь в LoginActivty.

SessionManager.java

package com.example.drawerlayout;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

import java.util.HashMap;


public class SessionManager {
    SharedPreferences sharedPreferences;
    public SharedPreferences.Editor editor;
    public Context context;
    int PRIVATE_MODE = 0;
    private static final String PREF_NAME = "LOGIN";
    private static final String LOGIN = "IS_LOGIN";
    public static final String NAME = "NAME";
    public static final String EMAIL = "EMAIL";
    public static final String TYPE = "TYPE";

    public SessionManager(Context context) {
        this.context = context;
        sharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = sharedPreferences.edit();
    }


    public void createSession(String name, String email, String type){
        editor.putBoolean(PREF_NAME, true);
        editor.putString(NAME, name);
        editor.putString(EMAIL, email);
        editor.putString(TYPE, type);
        editor.apply();
    }

    public boolean isLoggedIn(){
        return sharedPreferences.getBoolean(LOGIN, false);
    }

    public void checkLoggin(){
        if (!this.isLoggedIn()){
            Intent i = new Intent(context, LoginActivity.class);
            context.startActivity(i);
            ((MainActivity) context).finish();
        }
    }

    public HashMap<String, String> getUserDetails(){
        HashMap<String, String> user = new HashMap<>();
        user.put(NAME, sharedPreferences.getString(NAME, null));
        user.put(EMAIL, sharedPreferences.getString(EMAIL, null));
        user.put(TYPE, sharedPreferences.getString(TYPE, null));

        return user;
    }



    public void logOut(){
        editor.clear();
        editor.commit();
        Intent i = new Intent(context, LoginActivity.class);
        context.startActivity(i);
        ((MainActivity) context).finish();
    }
}

и SessionManager.java используется в LoginActivity следующим образом:

String name = details.getString("username").trim();
String email = details.getString("email").trim();
String type = details.getString("type").trim();

//CREATE SESSION
sessionManager.createSession(name,email,type);

и в MainActivity.java как

sessionManager = new SessionManager(this);
sessionManager.checkLoggin();

Ответы [ 4 ]

0 голосов
/ 19 сентября 2019

все значения sharedpreference сохраняются в файле xml, который содержит свой ключ и значение, поэтому каждое значение будет сгенерировано при первой попытке входа в систему, так почему бы вам не проверить, существует ли какое-либо значение в sharedpreference или нет таким образом ...поместите этот код в sessionHandler

 public static boolean preferenceExists(String key){
    return  sharedPreferences.contains(key);
}

, он вернет логический флаг, если там есть какое-либо значение или нет, просто проверьте, если preferenceExists () или нет .... если нетзатем перенаправьте его, выполните вход в систему, иначе перенаправьте туда, куда вы хотите

предложение: создайте заставку, где вы можете проверить эти вещи

0 голосов
/ 19 сентября 2019

Скорее всего, вы забыли добавить логическое поле LOGIN в сеанс создания вашего менеджера сеансов. Измените метод createSession, как показано ниже

public void createSession(String name, String email, String type,Boolean isLoggedIn){

    editor.putString(NAME, name);
    editor.putString(EMAIL, email);
    editor.putString(TYPE, type);
    editor.putBoolean(LOGIN,isLoggedIn)
    editor.apply();
}

И затем, если вход в систему выполнен успешно при входе в систему, вызовите этот код * 1004.*

    String name = details.getString("username").trim();
String email = details.getString("email").trim();
String type = details.getString("type").trim();

//CREATE SESSION
sessionManager.createSession(name,email,type,true);
0 голосов
/ 19 сентября 2019

Посмотрите ваши имена строковых переменных еще раз!

  • String PREF_NAME для получения предпочтения.

  • String LOGIN предназначен для адресации значения, чтобы проверить, вошел ли пользователь в систему или нет

Ваша ошибка:

  • Функция createSession (Имя строки, Строка электронной почты, Тип строки)
    1. Вы обновляете значение String PREF_NAME вместо String LOGIN

Решение:

  • Функция createSession (String name, String email, String type)
    1. Обновление значения String LOGIN вместо String PREF_NAME в строке № 29 из SessionManager.java
0 голосов
/ 19 сентября 2019

Вы обновляете неправильный ключ в методе createSession.

Заменить PREF_NAME на LOGIN в createSession.И ваш код будет работать как положено.

public void createSession(String name, String email, String type){

    // Check below line...
    editor.putBoolean(LOGIN, true);

    editor.putString(NAME, name);
    editor.putString(EMAIL, email);
    editor.putString(TYPE, type);
    editor.apply();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...