I have this code where I am trying to save some persistent data using sharedpreferences in the "InitialPreferences" activity, the "StartScreen" activity then searches for the saved preferences when the app next starts and either directs user to the "InitialPreferences" or the "MainActivity". My problem is that the data is not being saved and I can't see the problem, can anyone direct me to the problem and show me what I have done wrong?
Thanks
StartScreen activity:
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;
}
}
InitialPreferences activity:
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();
}
}
Your first problem is that (UserName != null)
is always true.
You are getting UserName
with String UserName = settings.getString("UserName", "");
, which will provide a default value of an empty String. If you want the settings to return null if the preference is not found, you should call settings.getString("UserName", null)
.
Your second problem is that you never call setOnClickListener(this)
on any of the Views in your InitialPreferences
Activity. Thus onClick()
is never called, and nothing happens. I'm assuming you want to call button1.setOnClickListener(this)
in onCreate()
.