web-dev-qa-db-fra.com

Ignorer correctement l'activité de connexion si vous êtes déjà connecté

L'icône Mon lanceur lance actuellement l'activité de connexion. J'ai enregistré le statut de connexion dans SharedPreferences. Existe-t-il un moyen correctement d'ignorer l'activité de connexion et d'accéder directement à l'activité principale sans aucun problème d'interface utilisateur. Toutes les solutions existantes impliquant finish() dans onCreate() font en sorte que le titre de l'activité de connexion soit brièvement visible ou que tout autre bref problème d'interface utilisateur à écran vide.

22
Monstieur

Avoir une activité de lancement sans interface utilisateur qui décide d'ouvrir MainActivity ou LoginActivity. Vous ne pouvez pas déclarer d'interface utilisateur avec:

Android:theme="@Android:style/Theme.NoDisplay"

Deux autres solutions possibles:

Faites simplement l'inverse: faites de mainActivity votre launcher et vérifiez si l'utilisateur est connecté. Puis redirigez-vous vers loginActivity lorsque ce n'est pas le cas.

Une autre façon est de travailler avec des fragments. Avoir une activité de base pouvant charger à la fois le mainFragment et le loginFragment. Pour référence: https://developer.Android.com/training/basics/fragments/index.html

38
wvdz

Vous pouvez créer une activité de base qui vérifiera si le nom d'utilisateur et le mot de passe de l'utilisateur se trouvent déjà dans la variable SharedPreferences et débutera l'activité si elle existe.

Exemple:

public class BeanStalkBaseActivity extends SherlockActivity{

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

    setContentView(R.layout.activity_main);


    if(SavedPreference.getUserName(this).length() == 0)
    {
        Intent intent = new Intent(this,LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }else
    {
        Intent intent = new Intent(this,MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }

}

}

BeanStalkBaseActivity devrait être votre lanceur car il sert uniquement de vérificateur.

1
Rod_Algonquin

Vous pouvez également vérifier le statut de connexion pendant votre activité d'écran de démarrage si vous en avez un. Les écrans de démarrage sont parfaits pour informer les utilisateurs que l'application n'est pas bloquée lors du chargement et peuvent également être utilisés pour rediriger l'application vers l'écran approprié.

J'ai suivi ce guide formidable dès la première fois: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

0
Ben

Dans l'activité principale, il suffit de vérifier si l'utilisateur n'est pas nul, puis de démarrer à la maison 

firebaseAuth = FirebaseAuth.getInstance();

FirebaseUser user = firebaseAuth.getCurrentUser();

if (user != null) {
    finish();
    startActivity(new Intent(MainActivity.this, UserHomeActivity.class));
}
0
user2784855