我在将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中找到更多信息。