2013-08-01 79 views
0

我有这段代码,我试图在“InitialPreferences”活动中使用sharedpreferences保存一些持久数据,然后“StartScreen”活动在应用下次启动时搜索保存的首选项,用户转到“InitialPreferences”或“MainActivity”。 我的问题是数据没有被保存,我看不到问题,任何人都可以指导我解决问题并告诉我我做错了什么?Sharedpreferences不保存或加载数据

感谢

启动画面活动:

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活动:

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

你有没有真的看到InitialPreferences活动?它看起来不像你会。 –

+0

我呢...我为什么不呢? –

+0

我最初误解了你的条件,但我的答案仍然适用。 –

回答

1

你的第一个问题是:(UserName != null)始终是真实的。 你得到UserNameString UserName = settings.getString("UserName", "");,它将提供一个空字符串的默认值。如果您希望设置在找不到首选项时返回null,则应该致电settings.getString("UserName", null)

第二个问题是,您从未在InitialPreferences活动的任何视图上致电setOnClickListener(this)。因此onClick()永远不会被调用,并且什么都不会发生。我假设你想在onCreate()中拨打button1.setOnClickListener(this)

+0

嗨,谢谢你的回答,我喜欢这个网站对新手总是有帮助的。在改为settings.getString(“UserName”,null)后,我现在有一个nullpointerexception?任何想法为什么?感谢您发现clicklistner。 –

+0

嗨,现在工作。我清理了这个项目,因为看不出为什么它会抛出那个空指针并解决了它。我也必须改变if(UserName.equals(“UserName”)){if(UserName.equals(UserName)){ –