Android拒绝写入/创建SharedReferences文件
我正在使用Eclipse3.5.2IDE进行Android开发。我正在使用以下代码写入默认的SharedReferences文件,并在adb emulator中运行该文件:Android拒绝写入/创建SharedReferences文件,android,emulation,commit,adb,sharedpreferences,Android,Emulation,Commit,Adb,Sharedpreferences,我正在使用Eclipse3.5.2IDE进行Android开发。我正在使用以下代码写入默认的SharedReferences文件,并在adb emulator中运行该文件: private SharedPreferences getOurSharedPreferences(Activity act) { // return getSharedPreferences(SHARED_PREFS_FILENAME, MODE_PRIVATE); return act.getPrefer
private SharedPreferences getOurSharedPreferences(Activity act) {
// return getSharedPreferences(SHARED_PREFS_FILENAME, MODE_PRIVATE);
return act.getPreferences(MODE_PRIVATE);
}
private void putStringToStorage(Activity act, String keyName, String s) {
// Store it.
SharedPreferences sharedPrefs = getOurSharedPreferences(act);
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.remove(keyName);
// editor.putString(keyName, s);
editor.putString(keyName, "test123");
boolean bCommitted = editor.commit();
if (!bCommitted)
throw new RuntimeException("(AndroidApplication) Unable to save new string.");
// Get it back as a test.
// String s2 = getStringFromStorage(keyName);
}
上述方法属于我的应用程序子类,这就是为什么该方法带有活动对象参数,以便我可以访问活动.getPreferences()。注意,以前我使用的是全局getSharedReferences()调用,但由于遇到问题,我迫不及待地改为getPreferences()。我之所以编写“test123”而不是变量“s”,是为了确保我遇到的问题与共享首选项文件可能不喜欢的某个“s”值无关
每当我运行代码编辑器时,commit()总是返回FALSE。一些历史。不久前,我能够使用名为“app_global”的共享首选项文件写入共享首选项文件,该文件是通过使用全局getSharedReferences()调用而不是Activity.getPreferences()创建的。我能够从共享首选项文件中写入和读取值,但是,每当我重新启动应用程序时,我在上一次会话中写入的值都会消失。作为调试工作的一部分,我进入了adb shell,并从我的应用程序的共享prefs文件夹中删除了“app_global”。从那时起,emulator似乎不愿意创建一个新的共享首选项文件,不管是默认文件还是其他文件
注意,LogCat窗口始终为空,控制台窗口不会显示任何错误,包括在emulator中启动我的应用程序期间。我还尝试在调试模式下启动应用程序,并在调试配置中选中“擦除用户数据”。这也没什么帮助。无论我做什么,editor.commit()都会失败,从adb shell执行“ls-a”操作时,我的应用程序的共享\u prefs文件夹始终为空
我的问题是:
- 我顺便读了一篇关于为模拟器“重建用户映像”的文章。这是一种我可以用来解决共享首选项存储问题的技术吗?如果是,我该怎么做
- 我还可以尝试解决这个问题吗
--roschler我通过手动重新创建SharedReferences文件来解决这个问题。我不能确定这一点,但如果您手动删除属于emulator的SharedReferences文件,则即使您选择“擦除用户数据”选项,它也不会重新创建该文件。要手动重新创建SharedReferences文件,我执行了以下操作:
- 加载ADB外壳
- 更改为SharedReferences文件夹(请注意,您必须运行emulator,否则将出现“未找到设备”错误,假设您也没有连接电话)
- 使用代码中使用的SharedReferences文件的名称创建一个空文件。在我的例子中,我创建了一个名为“app_global”的文件
/data/data/your.app.package.name/shared_prefs
其中,your.app.package.name是应用程序的包名。要从ADB shell中创建空文件,我使用以下命令:
echo -n >app_global
其中“app_global”是您命名的共享引用文件。-n选项可防止行式提要被抛出到文件中。如果使用的是getPreferences(),则默认SharedReferences文件的名称为“your.app.package.name\u preferences.xml”
我从这篇StackOverflow文章中获得了有关SharedReferences文件夹的信息:
--roschler只是一个旁注:抛出RuntimeException并不是一个很好的做法。您是否尝试过在editor.remove(keyName)之后使用commit()?没有,但我解决了问题。请参阅下面我的“自我回复”。谢谢