在同一应用程序中的不同活动之间的SharedPreferences

时间:2012-01-18 01:11:52

标签: java android sharedpreferences

我在将SharedPreferences恢复为与原始活动分开的活动时遇到了一些麻烦。

我有两个使用它的类,“NewCustomerActivity”和“OldCustomerActivity”。两者都应该具有对文件的读/写访问权限 - 目前我只是通过写入NewCustomerActivity进行测试,这将在杀死活动时适当地恢复表单数据;但是我在打开OldCustomerActivity时收到一个FC,它尝试使用NullPointerException以与NewCustomerActivity相同的意义恢复数据。

NewCustomerActivity:

public class NewCustomerActivity extends Activity {

public static final String USER_INFO = "UserInfoFile"; // This file will the store the user's information for later use.

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newcustomer);
    SharedPreferences userInfo = getSharedPreferences(USER_INFO, 0); // Restore our earlier saved info.
    EditText et;
   ...... (Other code is irrelevant)
}

OldActivityNew是相同的:

public class OldCustomerActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.oldcustomer);

    SharedPreferences userInfo = getSharedPreferences(NewCustomerActivity.USER_INFO, 0); // Restore our earlier saved info.
    EditText et;

    et = (EditText) findViewById(R.id.EditTextName);
    et.setText(userInfo.getString("name",""));
..... (Continue to fill forms in this context)
}

这两个活动都填写了以前的信息,如果有任何变化,则在提交时更新文件;但是只有NewCustomerActivity似乎填充文件(或者不强制关闭是特定的)

我尝试在MODE_WORLD_READABLE(第二个参数= 1)中设置SharedPreference也无济于事;即使我相信我应该能够在PRIVATE中运行它。我也尝试将USER_INFO引用为NewCustomerActivity.USER_INFO

我一定错过了一些明显的东西 - 但任何帮助都会受到赞赏,因为这是我的第一次尝试,谢谢!

编辑:

对于那些问我如何写文件的人:

        SharedPreferences userInfo = getSharedPreferences(USER_INFO, 0); // Save info for later
        SharedPreferences.Editor userInfoEditor = userInfo.edit();
        EditText et;
et = (EditText) findViewById(R.id.EditTextName);
        String nameValue = et.getText().toString();
        userInfoEditor.putString("name", nameValue);

1 个答案:

答案 0 :(得分:0)

看起来你正试图使用​​与你编写的模式不同的模式来获取oldCustomerActivity中的首选项。 在该课程中更改此行:

getSharedPreferences(NewCustomerActivity.USER_INFO, 1)

使用0作为mode参数:

getSharedPreferences(NewCustomerActivity.USER_INFO, 0)

传递给函数的int不会定义您是在阅读还是写作,而是定义了首次编写首选项后首选项的行为方式。

要在加载首选项后编辑首选项,您需要调用:

SharedPreferences.Editor editor = userInfo .edit();

然后您可以设置如下变量:

editor.putString("username", "Ash");

可以找到更多信息here