【发布时间】:2012-01-18 01:11:51
【问题描述】:
我在将 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);
【问题讨论】:
-
您如何尝试在每个活动中写入 SharedPreference?
-
这是一个 sn-p:SharedPreferences userInfo = getSharedPreferences(USER_INFO, 0); // 为以后保存信息 SharedPreferences.Editor userInfoEditor = userInfo.edit();编辑文本等; et = (EditText) findViewById(R.id.EditTextName);字符串名称值 = et.getText().toString(); userInfoEditor.putString("name", nameValue);
-
看起来你没有提交你的写操作。要使
SharedPreferences生效,在您完成所有编辑后,您需要执行userInfoEditor.commit(); -
感谢您的帮助 - 但正如我之前所说的;我正在正确地编写所有内容(最后我也调用了提交 - 正如我所说的那样,我只在这里发布了一个简短的 sn-p)我只是在第二个活动(OldCustomerActivity)中读取时遇到了问题跨度>
标签: java android sharedpreferences