plusieurs chaines de caracteres dans les preferences

  • Auteur de la discussion oroussel
  • Date de début
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #1
Bonjour, j'ai vraiment besoin d'aide svp :

je tente d'utiliser les sharedPreferences pour sauvegarder plusieurs chaines de caracteres .
malheureusement mes chaines se mélangent...

preferences = PreferenceManager.getDefaultSharedPreferences(this);

Pour sauvegarder l'une de mes chaine :
public void sauvegarde_todolistperso() {
SharedPreferences.Editor editor = preferences.edit();
editor.putString(PERSO, perso);
editor.commit();
}

et pour les récupérer toutes les 3 :
public void recuperation_des_listes() {
perso = preferences.getString(PERSO, "zut");
pro = preferences.getString(PRO, "zit");
courses = preferences.getString(COURSES, "zat");
}

pourquoi mes trois chaines semble concaténées après une récupération ???
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #2
Salut,

dans ta fonction putString(PERSO, perdo), cela reste en dur ? Si oui alors le problème est içi.
 
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #3
Merci Valentin de ton aide,

oui, ma fonction putString(PERSO, perso), reste en dur,
je veux dire elle est toujours écrite comme cela, mais la variable perso (en minuscule) est une chaine qui évolue dans le temps.

j'ai aussi plus loin :
editor.putString(PRO, pro);
et
editor.putString(COURSES, courses);

chaque fois je souhaite sauvegarder la valeur actuelle d'une des variable String (perso, pro, courses) dans le paramêtre correspondant (PERSO,PRO, COURSES)

Qu'est ce que je fais mal pour sauvegarder mes 3 chaines sans les mélanger ?
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #4
Ok, donc tu as bien 3 fois la fonction pour enregistrer tes 3 valeurs.

Lorsque tu récupères, genre que PERSO, il te sort quoi comme résultat ?
Est-ce que le fait de récupérer ta valeur par le même nom que ta variable d'entrée a une incidence ?
 
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #5
Valentin,
merci de ton aide, je commence a approcher de la déprime sur ce coup là !!!
A tel point que j'ai créer une nouvelle App vierge pour juste tester l'utilisation des préférences...
mais là encore je galère :
Voila mon Layout:
4249



et le code pour test, simple, mais ça ne fonctionne pas !!! Help !

(cette fois, rien n'est sauvegardé, je récupère toujours la valeur par défaut !)
package com.example.testparametres;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
public String txt1, txt2;
public EditText string1, string2;
public SharedPreferences preferences;
public final static String TXT1="", TXT2="";

@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
string1 = (EditText) findViewById(R.id.editText1);
string2 = (EditText) findViewById(R.id.editText2);
preferences = PreferenceManager.getDefaultSharedPreferences(this);
}

public void sauvegarde_txt(View v) {
//SharedPreferences.Editor editor = preferences.edit();
SharedPreferences settings = getSharedPreferences("filepref", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(TXT1, txt1);
editor.putString(TXT2, txt2);
editor.commit();
}

public void recuperation_txt(View v) {
SharedPreferences settings = getSharedPreferences("filepref", 0);
txt1 = preferences.getString(TXT1, "init1");
txt2 = preferences.getString(TXT2, "init2");
string1.setText(txt1);
string2.setText(txt2);
}

}
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #6
Dans ta fonction de sauvegarde, txt1 et txt2 ne sont pas déclarés.

Essaye ce code :

Java:
S'il vous plaît, Connexion ou S'inscrire to view codes content!
 
Dernière édition:
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #7
désolé Valentin,

mais après avoir tapé ton code (avec qq mini modifs pour pouvoir le lancer),
le txt2 écrase toujours le contenu du txt1, mon calvaire continu !!!

voici le code utilisé :

public class MainActivity extends AppCompatActivity {
public String txt1, txt2;
public EditText string1, string2;
public SharedPreferences preferences;
public final static String TXT1="", TXT2="";
public static final String filepref = "filepref";

@override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
string1 = (EditText) findViewById(R.id.editText1);
string2 = (EditText) findViewById(R.id.editText2);
sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);
}

public void sauvegarde_txt(View v) {
SharedPreferences sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);
String s1 = string1.getText().toString();
String s2 = string2.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(TXT1, s1);
editor.putString(TXT2, s2);
editor.commit();
}

public void recuperation_txt(View v) {
string1 = (EditText) findViewById(R.id.editText1);
string2 = (EditText) findViewById(R.id.editText2);
SharedPreferences sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);

if (sharedpreferences.contains(TXT1)) {
string1.setText(sharedpreferences.getString(TXT1, ""));
}
if (sharedpreferences.contains(TXT2)) {
string2.setText(sharedpreferences.getString(TXT2, ""));

}
}

}
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #8
Qu'as tu changé dans le code pour pouvoir le lancer ?
(tu fais plusieurs fois un getSharedPreferences dans ta fonction)

Peux tu réessayer le code que je t'ai donné, j'ai modifié un petit truc qui m'a échappé hier soir (et que j'ai corrigé dans mon précédent post).
 
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #9
Merci vraiment de ton aide Valentin,
je viens de faire un copier/coller complet de ton code sans changement,
et malheureusement à chaque utilisation de "récupération_txt()" ma chaine 2 écrase ma chaine 1 !!!
j'en perds mon latin !!!!!
Help !
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #10
Niveau code, je ne vois pas ce qui ne fonctionne pas.

Peux tu partager ta vue xml.
 
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #11
voici mon code java (enfin le tien) :

package com.example.montestparametre;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
public String txt1, txt2;
public EditText string1, string2;
public SharedPreferences sharedpreferences ;
public final static String TXT1="", TXT2="";
public static final String filepref = "filepref";

@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
string1 = (EditText) findViewById(R.id.editText1);
string2 = (EditText) findViewById(R.id.editText2);
sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);
}

public void sauvegarde_txt(View v) {
String s1 = string1.getText().toString();
String s2 = string2.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(TXT1, s1);
editor.putString(TXT2, s2);
editor.commit();
}

public void recuperation_txt(View v) {
string1 = (EditText) findViewById(R.id.editText1);
string2 = (EditText) findViewById(R.id.editText2);
sharedpreferences = getSharedPreferences(filepref, Context.MODE_PRIVATE);

if (sharedpreferences.contains(TXT1)) {
string1.setText(sharedpreferences.getString(TXT1, ""));
}
if (sharedpreferences.contains(TXT2)) {
string2.setText(sharedpreferences.getString(TXT2, ""));

}
}
}


et ma vue xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
"
xmlns:app="
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
"
xmlns:tools="
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<EditText
android:id="@+id/editText1"
android:layout_width="207dp"
android:layout_height="87dp"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="99dp" />

<EditText
android:id="@+id/editText2"
android:layout_width="230dp"
android:layout_height="79dp"
android:layout_marginTop="28dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintTop_toBottomOf="@+id/editText1"
tools:layout_editor_absoluteX="90dp" />

<Button
android:id="@+id/button_svg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="32dp"
android:eek:nClick="sauvegarde_txt"
android:text="Button svg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText2" />

<Button
android:id="@+id/button_recup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:eek:nClick="recuperation_txt"
android:text="Button Recup"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText2" />

</androidx.constraintlayout.widget.ConstraintLayout>
 
O

oroussel

Membre
Inscrit
14 Décembre 2018
Messages
7
Points
1
  • #12
Ca y est j'ai trouvé !!!!!!!
Les fonctions PutString et GetString doivent faire référence à une clés pour obtenir la valeur correspondante.
La clé doit être mentionnée entre guillemet : par exemple putstring("TXT1", valeur).
ça fonctionne !!!!

Merci Valentin de ton aide.
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #13
En mettant le TXT1 entre guillemets, du coup ca devient une chaine de caractères et non plus la variable (enfin je crois). Dans ton oncreate, TXT1 contient bien la valeur ?

Après si ça marche pour toi, tant mieux ;)
 

Sujets en relation

Haut Bas