[JAVA] Envoie de SMS / SharedPreferences.

Fermé
TartoPomme - Modifié le 27 avril 2020 à 10:14
BunoCS Messages postés 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 - 27 avril 2020 à 10:30
Bonjour, j'ai un problème depuis hier...

Mon problème est que quand je récupère une variable de mon "sharedPreferences", il se met directement par la valeur par défaut.
En gros, j'aimerais récupérer la variable numéro de ma première activité, pour m'en servir dans ma deuxième, mais celle si ce met directement sous la valeur par défaut soit "0" ici.

Voici le code java de ma première activité :

package android.waterconnect.waterconnect;
  
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity {
  
    //Déclaration des différents éléments.
    private static EditText editTextNumero;
    private static Button btnLogin;
    private static CheckBox mCheckBox;
    private static TextView textView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        //attribution de noms(id) aux éléments.
        editTextNumero = (EditText) findViewById(R.id.numero);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        mCheckBox = (CheckBox) findViewById(R.id.checkbox);
        textView = (TextView) findViewById(R.id.tv1);
  
        //Valeur par default / Restaure valeur par défaut. + attribution key. (Ici j'ai choisis comme ensemble de pref : "sharedPreferences", mais j'aurais pu choisir "numArduino".)
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        final int numero = sharedPreferences.getInt("numero", -1);
  
        //Test de compatibilité + affichage en haut à gauche.
        if (numero != -1){
            textView.setText("Bonjour, le dernier numéro enregistré est le : 0" + numero);
        }else{
            Toast.makeText(MainActivity.this, "Erreur, veuillez rentrer un numero.", Toast.LENGTH_SHORT).show();
        }
  
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent menuActivityIntent = new Intent(MainActivity.this, MenuActivity.class);
                menuActivityIntent.putExtra("numero", numero);
                startActivity(menuActivityIntent);
            }
        });
  
    }
  
    public void Save (View view){
  
        //On récupère la chaîne de caractères dans l'EditText et on la change en Int.
        String numeroStr = editTextNumero.getText().toString();
        int numero = Integer.parseInt(numeroStr);
  
        //Indique qu'on change une valeur.
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
  
        //On donné a la key "numero" la valeur de la variable "numéro".
        editor.putInt("numero", numero);
  
        //On applique les changements.
        editor.commit();
    }
}


Ainsi que le code Java de la deuxième activité :

package android.waterconnect.waterconnect;
  
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
  
public class MenuActivity extends AppCompatActivity {
  
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
  
        //appel a ma variable "numero" des SharedPreferences.
        SharedPreferences sharedPreferences = getSharedPreferences("numero",MODE_PRIVATE);
        int test = sharedPreferences.getInt("numero", 0);
        //Cast int en String.
        final String num = String.valueOf(test);
  
  
        //***** Bouton Batterie *****.
        //On récupère le bouton batterie en XML grâce à son id.
        Button btnBattery = (Button) findViewById(R.id.battery);
        //Message prédéfini pour la batterie.
        final String msgb = "donnees_batterie";
  
        btnBattery.setOnClickListener(new View.OnClickListener() {
  
            @SuppressWarnings("deprecation")
            public void onClick(View v) {
                if (num.length() >= 4){
                    SmsManager.getDefault().sendTextMessage(num, null, msgb, null, null);
                }else{
                    Toast.makeText(MenuActivity.this, "Erreur, le numéro est peut-être mal enregistré."+num, Toast.LENGTH_SHORT).show();
                }
            }
        });
        //***** Bouton Batterie *****.
  
  
  
        //***** Bouton Humidité *****.
        //On récupère le bouton humidité en XML grâce à son id.
        Button btnHumidity = (Button) findViewById(R.id.humidity);
  
        //Message prédéfini.
        final String msgh = "donnees_humidite";
  
        btnHumidity.setOnClickListener(new View.OnClickListener() {
            @SuppressWarnings("deprecation")
            public void onClick(View v) {
                SmsManager.getDefault().sendTextMessage(num, null, msgh, null, null);
            }
        });
        //***** Bouton Humidité *****.
    }
}


Merci à ceux qui m'aideront, c'est très gentil de leur part ! ;)
A voir également:

1 réponse

BunoCS Messages postés 15505 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 février 2025 3 913
Modifié le 18 mai 2020 à 14:20
Hello,

Je pense que tu mélanges
getPreferences()
et
getSharedPreferences()
.
La 1ère permet de stocker des valeurs liées à l'Activity. La 2nde permet de stocker des valeurs dans toute l'app. Doc pour plus de détails.

Dans ton cas, tu as 2 possibilités :

Soit tu utilises les
SharedPreferences

Ouvrir
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(FILE_KEY, Context.MODE_PRIVATE);


Ecrire
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(NUMBER_KEY, numero);
editor.commit();


Lire
int numero = sharedPref.getInt(NUMBER_KEY, -1);



Soit, comme tu as commencé à le faire, tu peux utiliser les paramètres d'
Intent


Envoi de paramètres
Intent intent = new Intent(this, MenuActivity.class);
intent.putExtra(EXTRA_NUMBER_KEY, numero);
startActivity(intent);


Réception des paramètres (dans le
onCreate()
de ta 2nde Activity)

Intent intent = getIntent(); // gets the previously created intent
int numero = intent.getIntExtra(EXTRA_NUMBER_KEY);



Note : les variables ***_KEY sont en faites des constantes que tu aura pris soin d'initialiser correctement
0