Pour le code ci-dessous, j'essaie de récupérer la préférence partagée, je pense qu'elle a été correctement enregistrée, mais lorsque je reviens à l'écran de connexion, toutes les données ont disparu. J'ai besoin qu'il reste lorsque je reviens à cet écran. J'entre donc le nom, l'âge et l'identifiant sur trois lignes distinctes sur la page de profil. Ensuite, j'appuie sur le bouton Enregistrer Rendez-vous ensuite sur la page précédente en appuyant de nouveau sur la barre d'action. Et quand je reviens à la page de profil, mes informations devraient toujours être là mais ce n'est pas le cas Avez-vous de l'aide?
package com.example.myprofile; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.sql.Savepoint; public class Profile extends AppCompatActivity { protected EditText NameEditText; protected EditText AgeEditText; protected EditText IDEditText; protected Button saveButton; protected Button settings_id; String name; String age; String id; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); EditText mEdit = (EditText) findViewById(R.id.NameEditText); mEdit.setEnabled(false); EditText mEdit1 = (EditText) findViewById(R.id.AgeEditText); mEdit1.setEnabled(false); EditText mEdit2 = (EditText) findViewById(R.id.IDEditText); mEdit2.setEnabled(false); NameEditText = (EditText) findViewById(R.id.NameEditText); AgeEditText = (EditText) findViewById(R.id.AgeEditText); IDEditText = (EditText) findViewById(R.id.IDEditText); settings_id = (Button) findViewById(R.id.settings_id); saveButton = (Button) findViewById(R.id.SaveButton); SharedPreferences prefs = getSharedPreferences(getString(R.string.ProfileName), Context.MODE_PRIVATE); name = prefs.getString("userName", ""); age = prefs.getString("userAge", ""); id = prefs.getString("userID", ""); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String name = NameEditText.getText().toString(); String age = AgeEditText.getText().toString(); String id = IDEditText.getText().toString(); SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.ProfileName), Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(getString(R.string.ProfileName), name); editor.putString(getString(R.string.ProfileAge), age); editor.putString(getString(R.string.ProfileID), id); editor.apply(); if (Integer.parseInt(age) < 18) { Toast toast1 = Toast.makeText(getApplicationContext(), "Invalid Age", Toast.LENGTH_LONG); toast1.show(); } else if (!name.isEmpty() && !age.isEmpty() && !id.isEmpty()) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); Toast toast = Toast.makeText(getApplicationContext(), "Name Saved!", Toast.LENGTH_LONG); toast.show(); } else { Toast toast2 = Toast.makeText(getApplicationContext(), "Incomplete Info", Toast.LENGTH_LONG); toast2.show(); } } }); getSupportActionBar().setDisplayHomeAsUpEnabled(false); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.settings_id: { EditText mEdit = (EditText) findViewById(R.id.NameEditText); mEdit.setEnabled(true); EditText mEdit1 = (EditText) findViewById(R.id.AgeEditText); mEdit1.setEnabled(true); EditText mEdit2 = (EditText) findViewById(R.id.IDEditText); mEdit2.setEnabled(true); saveButton.setEnabled(Boolean.parseBoolean("True")); } default: return super.onOptionsItemSelected(item); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); return true; } }
5 Réponses :
essayez (apply () à la fin de la ligne):
editor.putString(getString(R.string.ProfileName), name).apply(); editor1.putString(getString(R.string.ProfileAge), age).apply(); editor2.putString(getString(R.string.ProfileID), id).apply();
Je l'ai essayé, pas de chance malheureusement
Vous utilisez des chaînes particulières (getString (R.string.ProfileAge) ....) pour enregistrer les données dans les préférences partagées en mode privé en utilisant commit () ou apply (): - XXX
Mais vous n'essayez pas d'obtenir ces données en utilisant ces chaînes en mode privé, vous devez utiliser: -
SharedPreferences sharedPref = getSharedPreferences(getString(R.string.ProfileAge), Context.MODE_PRIVATE); String name = sharedPref.getString("key", "defaultValue");
Pour enregistrer les données, utilisez l'exemple de code suivant
String name; String age; String id;
Pour récupérer les données, utilisez l'exemple de code suivant
SharedPreferences prefs = getSharedPreferences( "com.example.myprofile", Context.MODE_PRIVATE); name = prefs.getString("userName", ""); age = prefs.getString("userAge", ""); id = prefs.getString("userID", "");
Avant méthode onCreate
name = NameEditText.getText().toString(); age = AgeEditText.getText().toString(); id = IDEditText.getText().toString(); SharedPreferences prefs = getSharedPreferences( "com.example.myprofile", Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("userName", name); editor.putString("userAge", age); editor.putString("userID", id); editor.apply();
Explication:
getSharedPreferences
est le nom de votre package, essentiellement la première ligne de votre code. SharedPreferences
, une seule suffit SharedPreferences.Editor
, une seule suffit également. clé
aléatoire, telle que le nom d'utilisateur de l'utilisateur pour enregistrer les données, car vous devrez alors transmettre la clé à d'autres activités via des intentions, et si vous allez faire cela, pourquoi ne pas envoyer le nom d'utilisateur au lieu de la clé? editor.apply ()
au lieu de editor.commit()
onPause ()
et de les récupérer dans onResume ()
, il peut donc être utile de les déclarer globales, pour éviter d'écrire des lignes supplémentaires de code. Pour enregistrer
SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.clear(); editor.commit();Pour obtenir
SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.remove("keyname"); editor.commit();Pour une seule suppression
SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE); pref.getString("keyname",null); pref.getInt("keyname",0); pref.getFloat("keyname",0); pref.getBoolean("keyname",true); pref.getLong("keyname",0);Pour tout supprimer
SharedPreferences pref = getSharedPreferences("Name", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putBoolean("keyname",true); editor.putString("keyname","string value"); editor.putInt("keyname","int value"); editor.putFloat("keyname","float value"); editor.putLong("keyname","long value"); editor.commit();
Vous pouvez utiliser la préférence de partage comme celle-ci
Pour enregistrer les données de préférence
SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE); share.getLong("user_id", 0); share.getString("token", "");
Pour obtenir des données de préférence
SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE); SharedPreferences.Editor edit = share.edit(); edit.putLong("user_id", 1); edit.putString("token","1243434sfdfsf"); edit.commit();
Vous pouvez essayer ce lien pour plus de détails: Préférence partagée dans Android
Avez-vous passé la clé correcte lors de la récupération des données? pour plus d'informations, developer.android.com/training/data-storage/… et stackoverflow.com/questions/23024831/… a>
Je pense qu'il n'y a pas besoin de plusieurs objets SharedPreferences et SharedPreferences.Editor, car un seul objet fera le travail, utilisez simplement différentes clés pour distinguer. Et je pense que vous devriez lire à partir du même objet SharedPreferences avec la même clé (* lors de l'initialisation pour lire partagé, passez la même clé que celle que vous avez utilisée lors de l'enregistrement) et je suppose que cela résoudra votre problème.
En 2020, Google a publié un nouveau stockage de données qui est remplacé par Shared Preference ... Il est développé avec "Kotlin" stackoverflow.com/questions/48001014/...