Bonjour,
Je suis sur un projet qui me demande de partager des données d'une activity avec une autre activity. J'ai utilisé une base de données SQLite, mais, ça n'a pas résout mon problème. J'ai pensé maintenant utiliser quelque chose du genre comme on le fait en PHP
$_SESSION['variable']
. Après mes recherche dans Google, je suis tombé sur < SharedPreferences >. J'ai essayé ça aussi, mais, c'est comme les données ne se transmettent pas d'une activity à une autre.
Bref, voici comment je veux mon code marche:
Une fois l'utilisateur valide le formulaire, les information sont enregistrées en premier dans une base de données SQLite et en second, en session < SharedPreferences >.
L'enregistrement dans la base de données marche très bien, sauf, la session < SharedPreferences > qui ne marche pas. Puis que je reçois rien de < SharedPreferences > dans une autre activity.
Voici mon code :
> Mon activity de connexion :
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Identification extends Activity implements View.OnClickListener {
EditText nom_prenom, telephone, mot_de_passe;
Button envoyer;
String moment_actuel, id_cle;
public String val_nom_prenom, val_telephone, val_mot_de_passe;
SQLiteDatabase bd_foto;
Cursor c1;
SharedPreferences shared;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_identification);
shared = getSharedPreferences("maSession", Context.MODE_PRIVATE);
telephone = (EditText) findViewById(R.id.telephone);
mot_de_passe = (EditText) findViewById(R.id.mot_de_passe);
nom_prenom = (EditText) findViewById(R.id.nom_prenom);
if(shared.contains("telephone")){
telephone.setText(String.valueOf(shared.getString("telephone", null)));
}
if(shared.contains("mot_de_passe")){
mot_de_passe.setText(String.valueOf(shared.getString("mot_de_passe", null)));
}
if(shared.contains("nom_prenom")){
nom_prenom.setText(String.valueOf(shared.getString("nom_prenom", null)));
}
envoyer = (Button) findViewById(R.id.envoyer);
envoyer.setOnClickListener(this);
moment_actuel = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());
id_cle = new SimpleDateFormat("ddMMyyyyHHmmss").format(new Date());
bd_foto = openOrCreateDatabase("foto", Context.MODE_PRIVATE,null);
bd_foto.execSQL("CREATE TABLE IF NOT EXISTS Compte(cle VARCHAR, nom_prenom VARCHAR, telephone VARCHAR, mot_de_passe VARCHAR, moment_actuel VARCHAR);");
Cursor c = bd_foto.rawQuery("SELECT * FROM Compte ORDER BY moment_actuel DESC", null);
while (c.moveToNext()) {
String user_nom_prenom = c.getString(1);
String user_telephone = c.getString(2);
String user_pass = c.getString(3);
if (user_nom_prenom != "" && user_telephone != "" && user_pass != "") {
//**********************************************
Intent intent_accueil = new Intent(Identification.this, Bienvenu.class);
startActivity(intent_accueil);
//Toast.makeText(Identification.this, "Vous êtes bien connectés", Toast.LENGTH_LONG).show();
}
else {
Intent intent_accueil = new Intent(Identification.this, Identification.class);
startActivity(intent_accueil);
Toast.makeText(Identification.this, "Vous devez créer un compte pour continuer", Toast.LENGTH_LONG).show();
}
}
c.close();
}
public void onClick(View view) {
if (view == envoyer) {
if (
(nom_prenom.getText().toString().trim().length() <= 5) &&
(telephone.getText().toString().trim().length() != 8) &&
(mot_de_passe.getText().toString().trim().length() <= 4)){
AfficheMessage("Erreur", "Vous devez entrer correctement les informations");
return;
}
else if (nom_prenom.getText().toString().trim().length() >= 6 && telephone.getText().toString().trim().length() == 8 && mot_de_passe.getText().toString().trim().length() >= 4){
bd_foto_prints.execSQL(String.format("INSERT INTO Compte(cle, nom_prenom, telephone, mot_de_passe, moment_actuel) VALUES('%s', '%s', '%s', '%s', '%s');", id_cle, nom_prenom.getText(), telephone.getText(), mot_de_passe.getText(), moment_actuel));
Toast.makeText(Identification.this, "Votre compte est bien créé.", Toast.LENGTH_SHORT).show();
videTexte();
finish();
startActivity(getIntent());
}
}
}
public void AfficheMessage(String titre, String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(titre);
builder.setMessage(message);
builder.show();
}
public void videTexte(){
nom_prenom.setText("");
telephone.setText("");
mot_de_passe.setText("");
}
public void getResults(View view){
val_telephone = String.valueOf(telephone.getText().toString());
val_mot_de_passe = String.valueOf(mot_de_passe.getText().toString());
val_nom_prenom = String.valueOf(nom_prenom.getText().toString());
final SharedPreferences.Editor editor = shared.edit();
editor.putString("telephone", val_telephone);
editor.putString("mot_de_passe", val_mot_de_passe);
editor.putString("nom_prenom", val_nom_prenom);
editor.commit();
}
}
> Mon activity où je veux utiliser les variables sessions :
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023111 14 déc. 2018 à 08:08
Salut,
getResults n'est pas appelé donc tes valeurs ne sont pas enregistrées, donc pas accessibles depuis tes autres activités.
Pour être plus safe utilise le context applicatif pour le shared pref à la place du context de ton activity, soit getApplicationContext().getSharedPreferences(..)
Pour passer des informations à une activity tu peux également passer des paramètres à l'activity de destination au niveau de la construction de l'Intent qui sera passé à startActivity (ou service).
Apres si tu veux partager un context(variables/objets sans refaire les instances) entre tes activités tu peux également passer par une création de context d'application (EXEMPLE)
14 déc. 2018 à 19:38
Merci pour votre réponse, mais, je n'ai pas compris votre réponse.
Est-ce que vous pouvez me corriger le code ci-dessus avec ce que vous proposer ?
Merci d'avance
14 déc. 2018 à 21:00
au plus simple
14 déc. 2018 à 22:23
Merci Twinuts toujours pour votre disponibilité pour nous.