2013-08-01 2 views
0

J'ai ce code où j'essaie d'enregistrer des données persistantes en utilisant des préférences partagées dans l'activité "InitialPreferences", l'activité "StartScreen" recherche ensuite les préférences sauvegardées lorsque l'application démarre et dirige utilisateur aux "InitialPreferences" ou "MainActivity". Mon problème est que les données ne sont pas enregistrées et je ne peux pas voir le problème, quelqu'un peut-il me diriger vers le problème et me montrer ce que j'ai fait mal?Préférences partagées ne sauvegardant pas ou ne chargeant pas de données

Merci

activité EcrAccueil:

public class StartScreen extends Activity { 

CountDownTimer waitTimer; 
public static final String APP_PREFERENCES = "AppPrefs"; 
SharedPreferences settings; 
SharedPreferences.Editor prefEditor; 

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

    settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); 
    // prefEditor = settings.edit(); 

    waitTimer = new CountDownTimer(5000, 300) { 

     public void onTick(long millisUntilFinished) { 
      //called every 300 milliseconds, which could be used to 
      //send messages or some other action 
     } 
     public void onFinish() { 
      //After 5000 milliseconds (5 sec) finish current 
      //if you would like to execute something when time finishes 
      getPreferences(); 
     } 
    }.start(); 
} 

private void getPreferences() { 
    // TODO Auto-generated method stub 
    String UserName = settings.getString("UserName", ""); 

    if (UserName != null) { 
     // the key does not exist 
       Intent intent=new   Intent(StartScreen.this,InitialPreferences.class); 
       startActivity(intent); 
      } 
    if (UserName.equals("UserName")){ 
     // handle the value 
       Intent intent=new Intent(StartScreen.this,MainActivity.class); 
       startActivity(intent); 
    }  
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.start_screen, menu); 
    return true; 
} 
} 

activité InitialPreferences:

public class InitialPreferences extends Activity implements OnClickListener { 

EditText editText1; 
Button button1; 
TextView textView1; 
RadioGroup radioGroup; 
RadioButton radioPosistionButton; 

public static final String APP_PREFERENCES = "AppPrefs"; 
SharedPreferences settings; 
SharedPreferences.Editor prefEditor; 

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

    textView1 = (TextView)findViewById(R.id.textView1); 
    editText1 = (EditText)findViewById(R.id.editText1); 
    button1 = (Button)findViewById(R.id.button1); 
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 

    settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); 
     prefEditor = settings.edit(); 

    LoadPreferences(); 
} 

@Override 
public void onClick(View v) { 

SavePreferences(); 
LoadPreferences(); 
} 

private void SavePreferences() { 
// TODO Auto-generated method stub 

String Uname_input = editText1.getText().toString(); 
int checkedButton = radioGroup.getCheckedRadioButtonId(); 
prefEditor.clear(); 
prefEditor.putString("UserName", Uname_input); 
prefEditor.putInt("posistion", checkedButton); 
prefEditor.apply(); 
prefEditor.commit(); 
} 

private void LoadPreferences(){ 

String UserName = settings.getString("UserName", ""); 
editText1.setText(UserName + ""); 
Toast.makeText(getApplicationContext(), UserName, Toast.LENGTH_SHORT).show(); 
} 
} 
+0

Avez-vous déjà vu l'activité InitialPreferences? Ça ne semble pas vouloir. –

+0

Je fais ... pourquoi ne le ferais-je pas? –

+0

J'ai d'abord mal lu votre conditionnel, mais ma réponse ci-dessous s'applique toujours. –

Répondre

1

Votre premier problème est que (UserName != null) est toujours vrai. Vous obtenez UserName avec String UserName = settings.getString("UserName", "");, qui fournira une valeur par défaut d'une chaîne vide. Si vous souhaitez que les paramètres renvoient null si la préférence n'est pas trouvée, vous devez appeler settings.getString("UserName", null).

Votre deuxième problème est que vous n'appelez jamais setOnClickListener(this) sur l'une des vues de votre activité InitialPreferences. Ainsi, onClick() n'est jamais appelé, et rien ne se passe. Je suppose que vous voulez appeler button1.setOnClickListener(this) en onCreate().

+0

Salut, merci pour votre réponse, j'adore ce site toujours utile pour les débutants. J'ai maintenant une exception nullpointer après avoir changé à settings.getString ("UserName", null)? aucune idée pourquoi? Merci d'avoir repéré le clicklistner. –

+0

Salut, travaille maintenant. J'ai nettoyé le projet car je ne pouvais pas voir pourquoi il jetait ce nullpointer et qui l'a résolu. J'ai aussi dû changer if (UserName.equals ("UserName")) {à if (UserName.equals (UserName)) { –

Questions connexes