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 :

Garder une variable en mémoire


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Par défaut Garder une variable en mémoire
    Bonjour,

    Je souhaiterais garder une variable en memoire.
    J'ai deux classes. Une classe appelée Ip.java qui récupère une adresse IP et l'autre nommée Connexion.java qui permet de se servir de cette variable (ip).
    Cette variable Ip permet de définir à mon device quel est le serveur qu'il doit écouter.

    Bon aujourd'hui quand l'utilisateur rentre l'adresse IP elle est gardée en mémoire temps que l'application ne se ferme pas (killer le process) et je souhaiterais y remédier.

    J'ai vu que l'on pouvait mettre cette variable dans la mémoire du telephone
    http://developer.android.com/guide/t...rage.html#pref

    Mais j'ai un problème ou mettre ces deux bou de code ? dans quelle classe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      // Restore preferences
           SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
           boolean silent = settings.getBoolean("silentMode", false);
           setSilent(silent);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        @Override
        protected void onStop(){
           super.onStop();
     
          // We need an Editor object to make preference changes.
          // All objects are from android.context.Context
          SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
          SharedPreferences.Editor editor = settings.edit();
          editor.putBoolean("silentMode", mSilentMode);
     
          // Commit the edits!
          editor.commit();
        }
    Donc j'ai fais des tests. Voici mes deux classes.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class Ip extends Activity {
     
    	private static String ip;
    	public static final String PREFS_NAME = "MyPrefsFile";
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_ip);
     
    		Button paramButton = (Button) findViewById(R.id.validate);
    		paramButton.setOnClickListener(new OnClickListener() {
     
    			@Override
    			public void onClick(View v) {
    				EditText tonEdit = (EditText)findViewById(R.id.Ip);
    				ip = tonEdit.getText().toString();
     
    				if (ip.equals("")){
    					Toast.makeText(Ip.this,
    							R.string.erreur6,
    							Toast.LENGTH_SHORT).show();
    					return;
    				}
     
    				else {
     
    					 // Restore preferences
    				       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    				       String silent = settings.getString("ip", ip);
    				       setSilent(silent);
     
    					Intent intent = new Intent(Ip.this,
    						Parametres.class);
    					// on appelle notre activité
    					startActivity(intent);
    				}
    			}
    		});
     
    		Button returnButton = (Button) findViewById(R.id.retour);
    		returnButton.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				finish();
    			}
    		});
     
    	}
     
    	@Override
        protected void onStop(){
           super.onStop();
     
          // We need an Editor object to make preference changes.
          // All objects are from android.context.Context
          SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
          SharedPreferences.Editor editor = settings.edit();
          editor.putString("silentMode", ip);
     
          // Commit the edits!
          editor.commit();
        }
     
    	public static String getIp(){
    		return ip;
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Connexion {
    	public static String strUrl(){
    		return "http://"+Ip.getIp()+"/Applications/";
    	}
    }
    De plus j'ai une erreur sur Eclipse ne le reconnait pas.

    Alors j'espère avoir été clair et j'espère que vous pourrez m'aider.

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Par défaut
    Le "setSilent(silent)" est juste un exemple de Google (suppose que dans sa classe, il y a une méthode setSilent...), il n'a rien à voir avec les prefs (donc en gros, tu l'enlève et tu l'oublie).


    Pour ce qui est de "où est-ce que je met le code", et bien tout simplement où tu en as besoin (ça peut être dans une seule classe, ou dans les deux).


    Le morceau ci-dessous, c'est pour enregistrer un String dans la mémoire, donc utilise dans la/les classes où tu doit sauvegarder ta variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
          SharedPreferences.Editor editor = settings.edit();
          editor.putBoolean("silentMode", mSilentMode);
     
          // Commit the edits!
          editor.commit();


    Et ce morceau là, c'est pour récupérer une valeur : utilise le donc dans ta/tes classes où tu dois retrouver l'adresse IP enregistrée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
           boolean silent = settings.getBoolean("silentMode", false);

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Par défaut
    Ok merci.
    Cependant dans mon cas, je dois Mettre zen mémoire mon IP dans une activité android et récupérer cet IP dans une classe java tout court.

    Et le getSharePreferences ne fonctionne pas.

    Merci d'avance !

  4. #4
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Je pense que tu te mélanges les pinceaux entre "classe" et "objet"...

    Un objet est l'instance d'une classe en mémoire... plusieurs objets de la même classes peuvent coexister en mémoire.

    Donc tu dois passer une addresse IP à un objet en mémoire....
    Le plus simple est donc de rajouter dans la classe une fonction "setInetAddress(InetAddress ipaddress);" qui se chargera de la stocker dans l'objet.
    (j'utilise InetAddress puisque c'est la classe dédiée aux adresses justement dans java.net)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class XXXXXX 
    {
        InetAddress    ip;
     
        public void setInetAddress(InetAddress addr)
        {
           this.ip = addr;
        }
    }

    Ensuite il faut récupérer cette adresse à un moment... Pour cela tu comptes utiliser SharedPreferences, ce qui est parfait...

    Il faut donc que la classe ci-dessus "communique" avec le système, ce qui veut dire qu'à un moment elle doit avoir un "Context", et, pour s'initialiser correctement, même l'avoir au constructeur.
    Pareillement, il nous faut un context pour modifier l'adresse, et donc, le rajouter en paramètre à setInetAddress():
    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
     
    class XXXXXX 
    {
        InetAddress    ip;
     
        public XXXXXX(Context ctxt)
        {
              this.ip = loadDefaultAddress(ctxt);
        }
     
        public InetAddress getAddress()
        {
              return this.ip;
        }
     
        public void setInetAddress(InetAddress addr, Context ctxt)
        {
              this.ip = addr;
              saveDefaultAddress(ctxt,this.ip);
        }
     
        private static void saveDefaultAddress(Context ctxt, InetAddress ip)
        {
              SharedPreferences settings = ctxt.getSharedPreferences(PREFS_NAME, 0);
              SharedPreferences.Editor editor = settings.edit();
              if (ip == null)
                   editor.remove("ip");
              else
                   editor.putString("ip", ip.toString());
              editor.commit();
        }
     
        private static InetAddress loadDefaultAddress(Context ctxt)
        {
              SharedPreferences settings = ctxt.getSharedPreferences(PREFS_NAME,0);
              String inetStr = settings.getString("ip");
              return (inetStr == null) ? null : InetAddress.getByName(inetStr);
        }
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 128
    Par défaut
    Bonjour,

    Même je ne comprends toujours pas. Excusez ma non compréhension.

    Mon application doit prendre en paramètre l'Ip d'un serveur, et c'est l'administrateur qui doit faire cela (la rentrer dans l'editText).

    J'ai une activité Ip.java qui permet de récupérer l'adresse Ip entrée par l'admin.
    Et j'ai une classe Connexion.java qui va récupérer l'adresse de Ip.java et s'en servir dans une méthode.
    Cette méthode me permet d'établir la connexion entre mon device et mon serveur elle est donc utilisée dans chaque script ou le besoin de se connecter se fais ressentir.

    Donc, dans mon activité Ip.java je veux mettre l'adresse Ip dans la mémoire du téléphone (afin qu'il n'y ai plus besoin de la reprogrammer à chaque lancement) et dans ma classe Connexion.java récupérer cette adresse qui est dans la mémoire du téléphone.

    Je ne peux donc pas mettre les deux bou de code dans la même classe.

    De plus pour faire cela je suis obliger de mettre certaines méthodes en static donc le context ne marche pas toujours.

    Je suis désolé mais la je pige pas grand chose pour le coup.
    J'ai compris le principe du sharePreferences mais je vois pas comment je peux le mettre en application dans mon cas.

    J’espère que je suis clair. Mes deux classes sont dans le premiers post.

    Merci beaucoup de votre aide

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Je ne peux donc pas mettre les deux bou de code dans la même classe.
    Pourquoi ??

    De plus pour faire cela je suis obliger de mettre certaines méthodes en static donc le context ne marche pas toujours.
    En quoi tu as besoin de méthode statique ?

    J'ai compris le principe du sharePreferences mais je vois pas comment je peux le mettre en application dans mon cas.
    Qu'est ce que tu as compris du principe de sharePreferences ?

    En gros ce que t'ont proposé nicroman et gilloddon c'est de pouvoir stocké ton adresse Ip dans les préférences de ton application. Ces préférences seront accessible à tout moment et sont des données persistantes.

    Après à toi de savoir quand tu dois y accéder en fonction du niveau (droit) de l'utilisateur.

    De plus tu parles d'utilisateurs dans ton premier post qui rentres l'Ip puis après d'un administrateur, c'est pas évident à suivre :s

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Garder une variable en mémoire
    Par n2engineer5 dans le forum Android
    Réponses: 3
    Dernier message: 26/04/2011, 16h35
  2. [Makefile] Garder une variable en mémoire entre 2 make
    Par Gui13 dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 12/01/2009, 14h30
  3. garder une variable en mémoire
    Par rachou59650 dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2008, 09h38
  4. Garder une variable en mémoire
    Par 123quatre dans le forum Langage
    Réponses: 3
    Dernier message: 10/07/2007, 19h01
  5. Comment garder une variable en mémoire...
    Par sam01 dans le forum Langage
    Réponses: 17
    Dernier message: 24/04/2006, 13h02

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