0
我創建並寫入SharedPreferences文件來存儲配置信息從一個應用程序,像這樣:讀舊值從SharedPreferences文件X-應用
public void setCustomAsync (. . . final Context context . . .) {
if (prefs == null || editor == null) {
prefs = context.getSharedPreferences("prefs", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
editor = prefs.edit();
}
editor.putString("Custom", info); // This may be changing a previously set value
editor.apply();
// Creating backups of the preferences file
execCommand(copyToBackup);
execCommand(mainFixPerm);
execCommand(bakFixPerm);
activity.finish();
}
public void execCommand (String[] arg0) {
try {
final Process pr = Runtime.getRuntime().exec(arg0);
final int retval = pr.waitFor();
if (retval != 0) { Log.d("ERROR:", String.valueOf(retval)); }
} catch (Exception e) {}
}
從另一個應用程序我讀信息:
private static String getCustom (final Context appContext) throws NameNotFoundException {
context = appContext.createPackageContext("com.example.settings", 0);
prefs = context.getSharedPreferences("prefs", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
return prefs.getString("Custom", EMPTY);
}
我的問題不是我無法獲取該文件,而是該值被第二個應用程序讀取時不是最新的。
調試第一個應用程序後,我可以看到將新配置保存到該文件可以正常工作,但只有當第二個應用程序重新啓動時纔會顯示更新的配置。否則,它會繼續閱讀舊值。
現在我明白了閱讀SharedPreferences here是
當「正在從各種get方法返回必須由應用程序被視爲不可改變的對象。」
但是,每次我從第二個應用程序中的文件中讀取值時,我都重申了自變量,所以我將它拉入新的正確值?我不確定這是否是這個問題,以及如何解決這個問題。
謝謝!
注意:我發佈的代碼是從我的實際應用中解釋的,只保留與問題相關的部分。