我在将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);
答案 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。