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

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

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);

最佳答案

似乎您正在尝试使用与编写首选项不同的方式在oldCustomerActivity中获得首选项。
在该类中更改此行:

getSharedPreferences(NewCustomerActivity.USER_INFO, 1)

将0用作mode参数:

getSharedPreferences(NewCustomerActivity.USER_INFO, 0)

传递给该函数的int不会定义您正在读取还是正在写入,但是会定义您希望首选项写入后的行为方式。

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

SharedPreferences.Editor editor = userInfo .edit();

然后可以像这样设置变量:

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

可以在here中找到更多信息。

10-05 19:37