bonjour,
j'ai besoin de mémoriser le résultat d'un calcul afficher dans un TextView pour l'utiliser dans d'autres activités. Dans un premier temps j'utilise une SharedPreferences dans un petit test pour comprendre comment cela fonctionne.
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
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_store = null;
    private Button btn_restore = null;
    private Button btn_clear = null;
    private EditText txt_data = null;
    private static String DATA = "0";    //avec null ou "" c'est idem
    private SharedPreferences preference = null;
    SharedPreferences.Editor editor = null;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        txt_data = (EditText)findViewById(R.id.editText_data);
        btn_store = (Button)findViewById(R.id.button_store);
        btn_clear = (Button)findViewById(R.id.button_clear);
        btn_restore = (Button)findViewById(R.id.button_restore);
        btn_store.setOnClickListener(this);
        btn_restore.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v)
    {
        switch (v.getId())
        {
            case R.id.button_store:
                String val = txt_data.getText().toString();
                preference = PreferenceManager.getDefaultSharedPreferences(this);
                editor = preference.edit();
                editor.putString(DATA, val);
                editor.commit();
                break;
 
            case R.id.button_restore:
                preference = PreferenceManager.getDefaultSharedPreferences(this);
                SharedPreferences.Editor editor1 = preference.edit();
                String data = preference.getString(DATA, "Vide");
                editor1.commit();
                txt_data.setText(data);
                break;
 
            case R.id.button_clear:
                txt_data.setText("");
                break;
        }
    }
}
Le bouton store me permet de lire et stocker le contenu du TextView. Le bouton clear efface le TextView et le bouton restore relit la sharedPreferences et l'affiche dans la TextView.
Ce scénario fonctionne correctement sauf si j'utilise le bouton restore en premier ce qui provoque l'erreur:
getSharedPreferences
org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string

Il y a des pistes sur le net mais aucune n'a résolu mon pb. Y a-t-il une solution ou ce que j'écris n'a-t-il pas de sens ou est-ce mal écrit ou bien ...

Merci