Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sauvegarder les données sur une activity

Sujet résolu
    19 novembre 2017 à 20:58:09

    Bonjour, 
    Je bosse depuis 6/7 heures sur un TP que j'ai eu en cours sur les intents avec Android Studio, mais je bloque sur un passage où je dois enregistrer des donnés entrées sur le main activity. 
    Je m'explique : 
    Quand je clique sur le bouton modifier de la partie du haut, quand j'entre les données et que je fait valider sur la deuxième activité, elles apparaissent bien sur le mainActivity. Mais si je clique juste après sur le bouton Modifier de la partie du bas, et que j'entre les données, en revenant sur le main acitivty, les changements sont bien pris en compte, mais les données de la partie du haut ont disparu ! 
    Petit schéma pour vous expliquer :
    J'ai bien essayé d'utiliser SharedPreferences, mais ça n'a pas fonctionné, ou alors je l'utilise mal. 
    Voici le code des mes différentes activités : 
    MainActivity : 
    package com.example.hugo.tpmasquesdossantoshugo;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            Button modif = (Button) findViewById(R.id.Modif);
    
            modif.setOnClickListener(new View.OnClickListener() {
    
    
                @Override
                public void onClick(View view) {
    
                    Intent intention = new Intent(MainActivity.this, Activity2.class);
                    startActivity(intention);
    
                }
            });
    
            Button modif2 = (Button) findViewById(R.id.Modif2);
    
            modif2.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View view) {
    
                    Intent intention2 = new Intent(MainActivity.this, Activity3.class);
                    startActivity(intention2);
    
                }
            });
    
    
            String nom = (String)getIntent().getStringExtra("message1");
            TextView nom2 = (TextView)findViewById(R.id.nom2);
            nom2.setText(nom);
    
            String prenom = (String) getIntent().getSerializableExtra("message2");
            TextView prenom2 = (TextView) findViewById(R.id.prenom2);
            prenom2.setText(prenom);
    
            String tel = (String) getIntent().getSerializableExtra("message3");
            TextView tel2 = (TextView) findViewById(R.id.tel2);
            tel2.setText(tel);
    
            String num = (String) getIntent().getSerializableExtra("message4");
            TextView num2 = (TextView) findViewById(R.id.num2);
            num2.setText(num);
    
            String rue = (String) getIntent().getSerializableExtra("message5");
            TextView rue2 = (TextView) findViewById(R.id.rue2);
            rue2.setText(rue);
    
            String code = (String) getIntent().getSerializableExtra("message6");
            TextView code2 = (TextView) findViewById(R.id.code2);
            code2.setText(code);
    
            String ville = (String) getIntent().getSerializableExtra("message7");
            TextView ville2 = (TextView) findViewById(R.id.ville2);
            ville2.setText(ville);
    
    
    
    
        }
    }
    
    Activity 2 : 
    package com.example.hugo.tpmasquesdossantoshugo;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    
    
    public class Activity2 extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_2);
    
            Button valider = (Button) findViewById(R.id.Valide);
            valider.setOnClickListener(new View.OnClickListener()
            {
    
                @Override
                public void onClick(View view) {
    
                    EditText nom = (EditText) findViewById(R.id.nom2);
                    EditText prenom = (EditText) findViewById(R.id.prenom2);
                    EditText numero = (EditText) findViewById(R.id.num2);
    
                    final String newnom = (String) nom.getText().toString();
                    final String newprenom = (String) prenom.getText().toString();
                    final String newnumero = (String) numero.getText().toString();
    
                    Intent intent = new Intent(Activity2.this, MainActivity.class);
                    intent.putExtra("message1", newnom);
                    intent.putExtra("message2", newprenom);
                    intent.putExtra("message3", newnumero);
                    startActivity(intent);
                }
            });
    
    
    
            Button Annuler = (Button) findViewById(R.id.annuler);
    
            Annuler.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view) {
    
                    Intent intent = new Intent(Activity2.this, MainActivity.class);
                    startActivity(intent);
                }
            });
    
        }
    }
    
    Activity 3 : 
    package com.example.hugo.tpmasquesdossantoshugo;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class Activity3 extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_3);
    
            Button valider = (Button) findViewById(R.id.Valider);
    
            valider.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View view) {
    
                    EditText num = (EditText) findViewById(R.id.num2);
                    EditText rue = (EditText) findViewById(R.id.rue2);
                    EditText code = (EditText) findViewById(R.id.code2);
                    EditText ville = (EditText) findViewById(R.id.ville2);
    
                    String newnum = (String) num.getText().toString();
                    String newrue = (String) rue.getText().toString();
                    String newcode = (String) code.getText().toString();
                    String newville = (String) ville.getText().toString();
    
                    Intent intent = new Intent(Activity3.this, MainActivity.class);
                    intent.putExtra("message4", newnum);
                    intent.putExtra("message5", newrue);
                    intent.putExtra("message6", newcode);
                    intent.putExtra("message7", newville);
    
    
                    startActivity(intent);
                }
            });
    
    
            Button Annuler = (Button) findViewById(R.id.annuler);
    
            Annuler.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    Intent intent = new Intent(Activity3.this, MainActivity.class);
                    startActivity(intent);
                }
            });
    
    
        }
    }
    
    Si vous avez une petite idée en tête, je suis preneur ! 
    Merci ! :)

    -
    Edité par Perseck 19 novembre 2017 à 20:59:00

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2017 à 21:16:31

      C'est pas les préférences que tu utilises, tu passes juste tes données à travers les intents. Cette façon la ca te permet de transférer des données d'une activité a l'autre mais en aucun cas ces données ne sont enregistrées. Donc forcément la première fois ça marche vu que tu viens juste de les remplir mais après tu envoie 4/5/6 mais pas 1/2/3 donc il considère qu'ils ont comme valeur null et n'affiche rien.

      Ici il faut que tu remplace tes  intent.putExtra par un editeur de préférences :

      SharedPreferences pref = getSharedPreferences(this);
      SharedPreferences.Editor editor = pref.edit();
      
      // tu associe ta valeur a une chaine de caractère servant de clé
      editor.putString("Message1", valeurmessage1);
      editor.putString("Message2", valeurmessage2);
      
      // tu enregistre le tout avec un commit
      editor.commit();

      et lorsque tu ouvre ton activité principale tu charge tes données avec

       String machaine = pref.getString("MessageX", valeurdéfaut);




      • Partager sur Facebook
      • Partager sur Twitter
      The people who are crazy enough to think they can change the world, are the ones who do.
        20 novembre 2017 à 12:41:38

        J'essaye ça ce soir ! Merci beaucoup :) 


        Nhi a écrit:

        C'est pas les préférences que tu utilises, tu passes juste tes données à travers les intents. Cette façon la ca te permet de transférer des données d'une activité a l'autre mais en aucun cas ces données ne sont enregistrées. Donc forcément la première fois ça marche vu que tu viens juste de les remplir mais après tu envoie 4/5/6 mais pas 1/2/3 donc il considère qu'ils ont comme valeur null et n'affiche rien.

        Ici il faut que tu remplace tes  intent.putExtra par un editeur de préférences :

        SharedPreferences pref = getSharedPreferences(this);
        SharedPreferences.Editor editor = pref.edit();
        
        // tu associe ta valeur a une chaine de caractère servant de clé
        editor.putString("Message1", valeurmessage1);
        editor.putString("Message2", valeurmessage2);
        
        // tu enregistre le tout avec un commit
        editor.commit();

        et lorsque tu ouvre ton activité principale tu charge tes données avec

         String machaine = pref.getString("MessageX", valeurdéfaut);





        -
        Edité par Perseck 20 novembre 2017 à 12:42:03

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2017 à 18:57:34

          Nhi a écrit:

          C'est pas les préférences que tu utilises, tu passes juste tes données à travers les intents. Cette façon la ca te permet de transférer des données d'une activité a l'autre mais en aucun cas ces données ne sont enregistrées. Donc forcément la première fois ça marche vu que tu viens juste de les remplir mais après tu envoie 4/5/6 mais pas 1/2/3 donc il considère qu'ils ont comme valeur null et n'affiche rien.

          Ici il faut que tu remplace tes  intent.putExtra par un editeur de préférences :

          SharedPreferences pref = getSharedPreferences(this);
          SharedPreferences.Editor editor = pref.edit();
          
          // tu associe ta valeur a une chaine de caractère servant de clé
          editor.putString("Message1", valeurmessage1);
          editor.putString("Message2", valeurmessage2);
          
          // tu enregistre le tout avec un commit
          editor.commit();

          et lorsque tu ouvre ton activité principale tu charge tes données avec

           String machaine = pref.getString("MessageX", valeurdéfaut);





          Cela ne fonctionne pas, en fait je ne vois pas où je dois mettre le 

          SharedPreferences pref = getSharedPreferences(this);
          SharedPreferences.Editor editor = pref.edit();

          et le 

          String machaine = pref.getString("MessageX", valeurdéfaut);



          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2017 à 19:21:44

            Dans ton activité2, au début du oncreate tu déclares les variable de préférences

            SharedPreferences pref = getSharedPreferences(this);
            SharedPreferences.Editor editor = pref.edit();

            Dans ton valider.setOnclicklistener, au lieu de mettre tes variable dans l'intent, tu les met dans les preférences avec editor.putString(.....), ensute editor.commit() pour enregistrer.

            Puis lorsque tu charge ton activité 1, tu ne récupère pas tes variables via l'intent comme tu le faisais avec 

            String nom = (String)getIntent().getStringExtra("message1");

            mais tu les récupère depuis les préférences 

            SharedPreferences pref = getSharedPreferences(this);
            String nom = pref.getString("message1", valeurDéfaut);



            -
            Edité par Nhi 21 novembre 2017 à 19:22:05

            • Partager sur Facebook
            • Partager sur Twitter
            The people who are crazy enough to think they can change the world, are the ones who do.
              21 novembre 2017 à 20:26:12

              Dans mon activité 2, au niveau de 

              SharedPreferences pref = getSharedPreferences(this);

              J'ai cette erreur :

              De plus, au niveau du :

              SharedPreferences pref = getSharedPreferences(this);
              String nom = pref.getString("message1", valeurDéfaut);

              J'ai la même erreur avec le this, mais j'ai également la "valeur par défaut" qui est en rouge dans le main activity : 



              C'est compliqué :'( 

              • Partager sur Facebook
              • Partager sur Twitter
                21 novembre 2017 à 21:16:39

                remplace le this par getContext()

                et pour la valeur par défaut j'imagine que tu veux laisser vierge quand il n'y a pas de valeur d'enregistré donc met simplement "", pas besoin de variable.

                • Partager sur Facebook
                • Partager sur Twitter
                The people who are crazy enough to think they can change the world, are the ones who do.
                  22 novembre 2017 à 17:55:22

                  ça ne fonctionne pas vraiment :( 
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 novembre 2017 à 18:11:34

                    Salut Perseck,

                    Si tu veux j'ai fais un vidéo qui traite le sujet des SharedPreferences. Dedans j'explique comment enregistrer les données et ensuite comment les récupérer. Si ça t’intéresse voici la vidéo : https://www.youtube.com/watch?v=dOGkMXC44mk

                    Si tu as des questions n'hésite pas

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 novembre 2017 à 21:32:28

                      Hmm autant pour moi, je t'ai dit la fonction de tête mais il manquait un mot c'est :

                      pref = PreferenceManager.getDefaultSharedPreferences(this);

                      et le pref.edit() est bon.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      The people who are crazy enough to think they can change the world, are the ones who do.

                      Sauvegarder les données sur une activity

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown