2014-07-13 7 views
0

Je suis en train de définir la préférence pour une valeur de chaîne comme:Préférences partagées pour une chaîne dans Android

//onCreate 
    if(name==null){ 
       setprefer(); 
      } 
      else{ 
       getpref(); 
      } 

    private void setprefer() { 
      et1 = (EditText) findViewById(R.id.editText1); 
      b1 = (Button) findViewById(R.id.button1); 
      b1.setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
        s = et1.getText().toString(); 
        if(s.matches("")) 
        { 
         //wait!! 
         Toast.makeText(Home.this, "Enter your name", Toast.LENGTH_SHORT).show(); 
        } 
        else{ 
         setpref(s); 
         Intent i = new Intent(Home.this, Homescreen.class); 
         i.putExtra("name", s); 
         startActivity(i); 
         Home.this.finish(); 
        } 
       } 
      }); 
     } 

     private void setpref(String name) { 
      SharedPreferences pref = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE); 
      Editor editor = pref.edit(); 
      editor.putString("key", name); 
      editor.commit();   
     } 
     private void getpref() { 
      SharedPreferences prefs = this.getSharedPreferences("prefkey", Context.MODE_PRIVATE); 
      s = prefs.getString("key", name); 
      Intent i = new Intent(Home.this, Homescreen.class); 
      i.putExtra("name", name); 
      startActivity(i); 
      Home.this.finish(); 
     } 

Je suis en train de la préférence avec la méthode setprefer(), mais chaque fois que je commence mon activité sa demande fr le nom que j'ai déjà stocké dans ma préférence. D'une certaine façon, je ne suis pas en mesure d'obtenir mes prefereces sauvegardés dans le code ci-dessus. S'il vous plaît suggérer un correctif.

+0

tirez des fichiers du préfixe partagé et vous pouvez également regarder les valeurs – KOTIOS

+0

Je ne suis pas sûr qu'il y ait assez de contexte (en particulier, le code complet actuel de 'onCreate') pour déterminer le problème. – Dallas

+0

rien de plus n'existe dans onCreate. J'appelle juste quelques fonctions comme spécifié. – Shubhankar

Répondre

1

Cela dépend de ce que name a quand vous faites ceci:

if(name==null){ 
    setprefer(); 
} 
else{ 
    getpref(); 
} 

Mais depuis avant la vérification n'assignez une valeur à la variable name, il est nul et donc setPrefer() est appelé à chaque fois. Vous devrez récupérer la valeur à partir de SharedPrefs et affecter à name avant de rechercher name == null.

0

La préférence partagée a une méthode appelée contains(). Essayez de vérifier si la préférence partagée existe déjà ou non. Cette méthode retournera vrai si la préférence existe.

+1

Si vous faisiez cela, et qu'il était nul, il se bloquerait, avec une exception NullPointerException. Alors ne fais pas ça. En outre, les «correspondances» ne sont pas géniales. Dans les deux cas, utilisez TextUtils.isEmpty (val), qui gère à la fois la chaîne vide et null. –

Questions connexes