startActivityForResult返回正确的结果,但随后变为null

时间:2017-04-04 03:01:23

标签: android sharedpreferences startactivityforresult

我有一个返回用户名的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();
}

2 个答案:

答案 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