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().

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top