2017-09-12 2 views
0

J'essaie de faire en sorte que mon application regarde d'abord si les préférences partagées sont définies. Si ce n'est pas le cas, il faut ouvrir une page où vous les tapez, puis les enregistrer, je les utiliserai plus tard. Il semble qu'il trouve des préférences partagées ou que mon code soit erroné car l'activité principale s'ouvre (l'instruction else s'exécute).Ne pas lire sharedPreferences d'une autre classe

Voici mon MainActivity:

 public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    boolean check = sharedPreferences.getBoolean("Check",false); 
    if(check){ 
     //Intent intent; 
     Intent SharedPrefsIntent = new Intent(MainActivity.this, SharedPrefs.class); 
     startActivity(SharedPrefsIntent); } 
    else { 
    setContentView(R.layout.activity_main); 
    TextView brands = (TextView) findViewById(R.id.brands); 

Et voici les SharedPrefs:

 public class SharedPrefs extends MainActivity { 
//public static Context context; 
EditText ed1,ed2,ed3; 
Button b1; 

public static final String MyPREFERENCES = "MyPrefs" ; 
public static final String Name = "nameKey"; 
public static final String Phone = "phoneKey"; 
public static final String Email = "emailKey"; 

SharedPreferences sharedpreferences; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.shared_prefs); 

    ed1=(EditText)findViewById(R.id.editText); 
    ed2=(EditText)findViewById(R.id.editText2); 
    ed3=(EditText)findViewById(R.id.editText3); 

    b1=(Button)findViewById(R.id.button); 
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String n = ed1.getText().toString(); 
      String ph = ed2.getText().toString(); 
      String e = ed3.getText().toString(); 

      SharedPreferences.Editor editor = sharedpreferences.edit(); 

      editor.putString(Name, n); 
      editor.putString(Phone, ph); 
      editor.putString(Email, e); 
      editor.commit(); 
      Toast.makeText(SharedPrefs.this,"Thanks",Toast.LENGTH_LONG).show(); 
     } 
    }); 
     } 

    } 

Je dois être honnête, je ne suis pas tout à fait sûr où je veux Java chercher des préférences partagées, " ce qui rend la course d'application au moins.

+0

'booléen check = sharedPreferences.getBoolean ("Check", faux); Vous essayez de lire cette valeur. Mais où l'avez-vous écrit? – greenapps

+1

Remplacez cette ligne sharedpreferences = getSharedPreferences (MyPREFERENCES, Context.MODE_PRIVATE); par sharedpreferences = PreferenceManager.getDefaultSharedPreferences (this); Et tout premier appel getBoolean() retournera false. alors mettez à jour vos instructions conditionnelles en conséquence – Napolean

+0

Ok, merci Napolean. J'ai changé les getSharedPreferences à votre suggestion et cela fonctionne. J'ai également changé l'instruction if du getBoolean à if (! Check) et maintenant il va à la classe SharedPrefs. Génial. Je mets alors et intentionnellement sous le bouton de soumission pour aller à la classe MainActivity si je soumets, mais alors il le renvoie à la classe SharedPrefs. Ne devrait-il pas alors lire qu'il y a maintenant des préférences partagées et aller à la classe MainActivity? –

Répondre

0

dans la classe SharedPrefs{}, déclarer la variable

public static boolean CHECK_VALUE = false; 

Dans la même classe à l'intérieur méthode onClick(View v) après editor.commit();, définissez

CHECK_VALUE = true; 

Et dans MainActivity{} classe à l'intérieur OnCreate() méthode

if(!SharedPrefs.CHECK_VALUE){ 
    //SharedPreferences was not used before 
    Intent SharedPrefsIntent = new Intent(MainActivity.this, SharedPrefs.class); 
    startActivity(SharedPrefsIntent); 
    } 
else { 
//SharedPreference are already set 
//Do your stuffs 
} 

En fait, vous n'avez pas besoin SharedPreference de vérifier ici. Si vous le faites vraiment, puis mettre

editor.putBoolean("check", true); 

intérieur OnClick() méthode de SharedPrefs{} classe et pour l'obtenir ou de l'utiliser dans MainActivity

SharedPreferences sharedPreferences = getSharedPreferences(SharedPrefs.MyPREFERENCES, Context.MODE_PRIVATE); 
Boolean Check = sharedPreferences.getBoolean("check", false); 
if(!check){ 
    //SharedPreferences was not used before 
    Intent SharedPrefsIntent = new Intent(MainActivity.this, SharedPrefs.class); 
    startActivity(SharedPrefsIntent); 
} 
else { 
    //SharedPreference are already set 
    //Do your stuffs 
}