IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Supprimer la pile d'activité


Sujet :

Android

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Supprimer la pile d'activité
    Bonjour à tous,

    Je rencontre depuis pas mal de temps un problème auquel je ne trouve désespéramment, aucune solution.

    J'ai une activité A qui permet de se connecter à l'application avec ses identifiants (ou de les vérifier lorsqu'ils sont en mémoire) et afin d'éviter à l'utilisateur de revenir sur cette dernière je la supprime lors du passage à l'activité B.

    Ce qui amène à la pile suivante : B, C, D, E, etc...

    Lors de la déconnexion, l'activité A n'existant pas, elle est créée sur le dessus de la pile et ainsi FLAG_ACTIVITY_CLEAR_TOP ne supprime rien, ce qui est logique. Or je souhaite pour ma part ne disposer plus que de l'activité A.

    Auriez vous une idée pour supprimer la pile et lancer une nouvelle activité ?

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    La logique pour un "login" est:

    Toute activité nécessitant une authentication (B,C,D,E,...) vérifie celle-ci (stocké dans l'application ?) et si non existante appelle A (avec retour).
    A n'est donc jamais dans la pile.
    On peut commencer sur D si on a envie.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Déjà un grand merci pour cette réponse rapide

    Actuellement mon activité login A (LAUNCHER) récupère le pseudo ainsi que le mot de passe, les vérifies, et si tout est bon les stock avec PreferenceManager.

    Si les identifiants sont déjà présents, je pars du principe qu'ils sont potentiellement correct et passe à directement à l'activité B sans même vérifier leurs pertinences à cette étape.

    Mon application ayant pour chaque activité forcément besoin de données serveur, je transmet en POST les identifiants à la requête HTTP qui seront évidement systématiquement vérifier avant de renvoyer une réponse JSON, et redirige en cas d'erreur sur l'activité d’identification. Il est donc vrai que le problème se présente aussi sur toutes les activités que se soit B, C, D ou autre et que A n'est jamais dans la pile.

    Si j'ai bien compris, je dois raisonner dans l'autre sens ?

    Mon LAUNCHER devrait appeler plutôt B et rediriger sur A avec un retour sur l'activité en cours quelle qu’elle soit lorsque l’identification échoue ?

    Cependant le problème persiste : lors d'un clic sur le bouton retour l'activité précédente est toujours présente ainsi que la totalité de la pile.

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui... par exemple, faire hériter toutes les activités de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class AuthenticatedActivity extends Activity
    {
         private final static int AUTHENTICATION_REQUEST = -823;
     
         private static Authentication auth; //<= classe à définir
     
         public void onResume() {
             if (auth == null) {
                 onAuthFailed(false);
             } else {
                 onAuthSuccess(auth);
             }
         }
     
         public void onActivityResult(int requestCode, int resultCode, Intent data)
         {
             if (requestCode == AUTHENTICATION_REQUEST) {
                 if (resultCode == RESULT_OK) {
                     auth = new Authentication(data.getBundle());
                     onAuthSuccess(auth);
                 } else
                     onAuthFailed(true);
             } else
                 super.onActivityResult(requestCode,resultCode,data);
         }
     
         public void onAuthFailed(boolean afterLogin)
         {
              if (!afterLogin) {
                 startActivityForResult(
                     new Intent(this,LoginActivity.class),
                     AUTHENTICATION_REQUEST);
              } else
                 finish();
         }
     
         // Callback when someone logged in.
         public abstract void onAuthSuccess(Authentication a);
    }
    Et bien sur, LoginActivity:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class LoginActivity extends Activity
    {
         public void onCreate(Bundle savedinstance)
         {
              super.onCreate(savedinstance);
              setContentView(R.layout.login);
     
              ...
              setResult(RESULT_CANCELED);
          }
     
          public void onLoginButtonClicked() {
              String login = loginEdit.getText().toString();
              String password = pwdEdit.getText().toString();
              performLogin(login,password);
          }
     
          private void performLogin(String login, String password) {
              showProgress();
              LoginTask task = new LoginTask(login,password);
              task.execute();
          }
     
          private onLoginTaskSuccess(Authentication auth) {
              hideProgress();
              Intent result = new Intent();
              result.setBundle(auth.toBundle());
              setResult(RESULT_OK,result);
              finish();
          }
     
          private onLoginTaskFailed(int reason) {
              hideProgress();
              Toast.makeText(.......).show();
          }
    }
    etc...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai bien saisi la notion de retour, je me suis peut être mal exprimé le problème n'est pas propre à login.

    Si cela peux aider mon problème se présente aussi dans un second contexte : je travail sur un jeu par navigateur de gestion d'écurie automobile qui propose aux joueurs plusieurs serveurs (S1, S2, S3, etc...).

    J'ai pour gérer cela une variable serveur stocker avec PreferenceManager ayant pour valeur :
    - 0 = Aucun serveur sélectionné
    - 1 = S1
    - 2 = S2
    - ...

    Lors de la première identification, le joueur arrive sur l'activité profil avec les informations globales relative à son compte. Au changement de serveur (qu'elle que soit l'activité) cette variable est mis à jour et l'activité écurie (propre à un serveur) est appelé et les précédentes devraient aussi être supprimer pour éviter des problèmes de cohérence.

    Par exemple :
    Le joueur fait ses opérations sur le serveur 1, puis switch sur le serveur 2. La variable sera passé de 1 à 2, or si il y a retour à l'activité précédente (bouton retour) la vue correspondra au serveur 1 et la moindre action sur celle-ci agira sur le serveur 2.

    Tout comme pour l'identification, l'activité écurie n'est pas systématiquement présente. Il me faudrait donc aussi dans ce cas pouvoir supprimer la pile pour repartir sur une nouvelle.

Discussions similaires

  1. Supprimer la pile d'activités
    Par anto2b dans le forum Android
    Réponses: 5
    Dernier message: 12/08/2013, 23h24
  2. Supprimer des messages de la pile TCP
    Par snicolay dans le forum Réseau
    Réponses: 2
    Dernier message: 30/01/2012, 15h25
  3. Vtiger: supprimer l'onglet activité
    Par galsen.quebec dans le forum Vtiger
    Réponses: 1
    Dernier message: 10/11/2010, 20h00
  4. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37
  5. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo