我有一个返回用户名的startActivityForResult。 onActivityResult
内的这段代码返回了新的用户名,由返回它的日志函数证明。
// return user initials from popup
setUsername(intent.getStringExtra("USERNAME"));
Log.d("ME", "Username is now :" + getUsername()); //returning the real result
结果返回MainActivity后,我有一个从getUsername()读取的共享首选项函数;
SharedPreferences sp = getPreferences(Context.MODE_PRIVATE);
setUsername(sp.getString("USERNAME", ""));
这只返回""
而不是应该写入setUsername()
的内容。作为参考,我的方法是:
private void setUsername(String name) {
username = name;
}
private String getUsername() {
return username;
}
// called during onDestroy()
void write() {
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("USERNAME", getUsername());
editor.putBoolean("FIRST_RUN", firstRun);
editor.apply();
}
// called during onStart()
void read() {
SharedPreferences sp = getPreferences(Context.MODE_PRIVATE);
setUsername(sp.getString("USERNAME", ""));
firstRun = sp.getBoolean("FIRST_RUN", true);
}
在另一个课程中,我正在用共享首选项编写用户名:
private void write() {
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("USERNAME", etInitials.getText().toString());
editor.apply();
}
答案 0 :(得分:1)
SharedPreferences sp = getPreferences(Context.MODE_PRIVATE);
setUsername(sp.getString("USERNAME", ""));
你确实意识到第二行正在设置一个值,因此不是获取你设置的名称。
void write() {
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit();
editor.putString("USERNAME", getUsername());
editor.putBoolean("FIRST_RUN", firstRun);
editor.apply();
}
需要首先使用此intent.getStringExtra("USERNAME")
答案 1 :(得分:1)
假设"其他班级"在onDestroy期间调用write方法,将首先调用main活动的onActivityResult:
OtherActivity >>> onPause
MainActivity >>> onActivityResult
MainActivity >>> onRestart
MainActivity >>> onStart
MainActivity >>> onResume
MainActivity >>> onPostResume
OtherActivity >>> onStop
OtherActivity >>> onDestroy