Условное переключение активности в общих настройках Android

У меня есть приложение для Android, которое я использую для регистрации пользователей на своем веб-сайте. Моя первая задача — зарегистрировать пользователя, если мой общий файл настроек показывает, что информация о зарегистрированном пользователе отсутствует.

Если в моем приложении есть зарегистрированный пользователь, я предоставляю следующий код, чтобы просто и автоматически переключиться на действие «домашняя страница»:

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

        if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, "") == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, "") == null){
            //setContentView(R.layout.signin);
            Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
        }else{
            Intent intent   =   new Intent(SignIn.this, Confirmed.class);
            startActivity(intent);
        }
... other code

Таким образом, из моего действия по умолчанию, signin.java, приложение либо переключится на действие «Подтверждено», либо останется включенным и отобразит действие входа.

Моя проблема в том, что когда система работает, и я переключаюсь на Подтвержденную активность, я предоставляю прослушиватель выхода из системы, который находится ниже:

 signout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //USERPREFERENCES.cl
                Toast.makeText(Confirmed.this, "signout responding!", Toast.LENGTH_LONG).show();
                USERPREFERENCES.edit().clear().commit();
            }
        });

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

Это происходит, хотя я могу подтвердить, что переменные пусты.

Я надеюсь, что это поможет некоторым, кто может предложить мне некоторую помощь. Спасибо.


person sisko    schedule 30.05.2011    source источник


Ответы (3)


Это вряд ли когда-либо будет правдой:

USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null

Что, если вы используете это вместо этого?

if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, null)  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, null) == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, null) == null){
    //setContentView(R.layout.signin); TRY TO AVOID DOING THIS THING!!!!!
    Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
}else...

Кроме того, в качестве рекомендации... вместо переключения между действиями... что, если вы создадите только действие Signing.java и поместите ViewFlipper в его макет. Таким образом, ваше приложение будет не только быстрее, но и проще в обслуживании.

person Cristian    schedule 30.05.2011
comment
Да, хороший улов на != null. Интересно, как это работало на него изначально. - person dmon; 30.05.2011
comment
Спасибо вам обоим, особенно Кристиану. Ваш вклад помог мне понять, где я ошибаюсь. И я рассмотрю ViewFlipper, который слишком ценится! - person sisko; 30.05.2011

Это связано с тем, что когда вы вернетесь к LoginActivity, это будет возобновлено, а не создано. Это означает, что ваш код входа в систему, который вы написали в OnCreate, не будет вызываться, потому что в этот раз был вызван Overrider OnResume, а не onCreate.

Поэтому либо снова напишите этот код в onResume, либо вызовите finish() перед переходом ко второму действию, чтобы в следующий раз он вызывал onCreate().

person Shailendra Singh Rajawat    schedule 30.05.2011

Если вы вернетесь к первому действию, onCreate больше не будет вызываться (если только действие не было уничтожено из-за нехватки ресурсов). Переместите код аутентификации в onResume.

person Gabriel Negut    schedule 30.05.2011
comment
Спасибо. С моей стороны требуется немного больше ноу-хау жизненного цикла. Спасибо еще раз - person sisko; 30.05.2011