2014-11-26 1 views
1

У меня есть 2 вида деятельности: Login и MainКак хранить учетные данные пользователя, чтобы пользователи не могли снова войти в систему?

У меня также есть App класс, который работает до деятельности.

public class App extends Application 
{ 
    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
    } 
} 

Моего AndroidManifest.xml делает Login активности будет первое мероприятие для запуска.

Должен ли я перейти на деятельность Login, проверьте SharedPreferences, затем определите, был ли пользователь уже зарегистрирован?

Или Должен ли я делать пустое действие, которое выполняет эту проверку, затем запускает правильную активность, либо Login, либо Main?

Или возможно проверка должна быть выполнена в классе App и внесении изменений в Андроид манифест.

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

+0

http://developer.android.com/guide/topics/data /data-storage.html –

ответ

0

Сохранение учетных данных на вас. Ofc лучше держать его в безопасном месте и закодировано;)

Есть много возможных решений:

1) SplashScreen Теоретически мы не должны использовать заставки: P Но в данном случае это будет просто супер;)

Intent mIntentMain = ... 
Intent mIntentLogin = ... 
boolean mIsUserLogged = ... 
startActvity(mIsUserLogged ? mIntentMain : mIntentLogin); 

2) Главный Упражнение Начните основное действие и перед заполнением экрана данными, ws-вызовами и т. Д. Сразу после onCreate проверьте учетные данные;), если его ok -> начать анализ данных/заполняющих материалов else -> завершить основную деятельность, показать тост, открыть l ogin деятельности

3) Фрагменты активность Главная -> проверить учетные данные -> фрагмент положить Логин или основной фрагмент

0

Проверить для входа в SharedPreferences занимает немного времени, и если вы реализуете эту проверку с помощью пустой деятельности время запуска вашего приложения будет увеличено без причины (время запуска 2 мероприятия вместо 1 активности)

вам может сделать проверку в вашем MainActivity, и если он не сработает, то запустите LoginActivity

0

Как вы управляете регистрациями? Весь поток входа/регистрации/аутентификации, хотя и легко выглядит на бумаге, может стать довольно сложным с множеством крайних случаев, когда вы учитываете несколько одновременных логинов, изменения пароля, забытые пароли, удаления учетной записи и т. Д. Таким образом, Android обеспечивает AccountManager специально для этой цели, и this является одним из лучших руководств по его использованию.

0

Вы можете просматривать заставку во время загрузки приложения и в это время проверять имя пользователя и пароль. Или вы можете загрузить главный экран с индикатором зарядки, чтобы пользователь знал, что что-то происходит, и приложение не застревает.

0

Первый подход:

Я предлагаю вам пойти с Фрагментами.

Launch MainActivity, проверьте в onCreate() ли действителен пользователя Войти сессии, если это действительно идут с нормальным рабочим процессом, в противном случае запустите ваш LoginFragment

Второй подход:

Go с SplashActivity, проверьте ваш валидность войти сеанс пользователя и решить, рабочий процесс

Третий подход

Предположим, что пользователь вошел в систему, а л aunch вашего MainActivity внутри onCreate() проверить пользователь сеанс валидности, если недействительны затем запустить LoginActivity и finish() вашего MainActivity

Первой бесспорно один может быть вашим лучшим выбором, но я должен оставить это решение для вас. :)

1

Хорошее решение создать новый класс для хранения информации о сессии, например:

public class SessionManager { 
// Shared Preferences 
SharedPreferences pref; 

// Editor 
Editor editor; 

// Context 
Context mContext; 

// Shared pref mode 
int PRIVATE_MODE = 0; 

// Sharedpref file name 
private static final String PREF_NAME = "MyPref"; 

// All Shared Preferences Keys 
private static final String IS_LOGIN = "IsLoggedIn"; 
private static final String KEY_EMAIL = "email"; 
private static final String KEY_ID = "id"; 

// Constructor 
public SessionManager(Context context) { 
    this.mContext = context; 
    pref = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
    editor = pref.edit(); 
} 

/** 
* Create login session 
*/ 
public void createLoginSession(String email, int id) { 
    // Storing login value as TRUE 
    editor.putBoolean(IS_LOGIN, true); 

    // Storing email in pref 
    editor.putString(KEY_EMAIL, email); 

    // Storing id in pref 
    editor.putInt(KEY_ID, id); 

    // commit changes 
    editor.commit(); 
} 

/** 
* Check login method wil check user login status 
* If false it will redirect user to login page 
* Else won't do anything 
*/ 
public void checkLogin() { 
    // Check login status 
    if (!this.isLoggedIn()) { 
     // user is not logged in redirect him to Login Activity 
     Intent i = new Intent(mContext, LoginActivity.class); 

     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

     // Staring Login Activity 
     mContext.startActivity(i); 
    } 

} 


/** 
* Quick check for login 
* * 
*/ 
// Get Login State 
public boolean isLoggedIn() { 
    return pref.getBoolean(IS_LOGIN, false); 
} 

public int getId() { 
    return pref.getInt(KEY_ID, 0); 
} 
} 

И в вашем MainActivity вы должны проверить, если пользователь вошел в систему или нет:

public class MainActivity extends Activity { 

// Session Manager Class 
SessionManager session; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    // Session class instance 
    session = new SessionManager(getApplicationContext()); 
    session.checkLogin(); 
. 
// code goes here 
... 

Если пользователь не вошел в систему он будет перенаправлен в LoginActivity.

В LoginActivity просто проверить электронную почту/PASS или что-то, ... звоните:

session.createLoginSession(mEmail, mId); 

и перенаправить пользователя на MainActivity

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