2014-04-28 60 views
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方法返回必須由應用程序被視爲不可改變的對象。」

但是,每次我從第二個應用程序中的文件中讀取值時,我都重申了自變量,所以我將它拉入新的正確值?我不確定這是否是這個問題,以及如何解決這個問題。

謝謝!

注意:我發佈的代碼是從我的實際應用中解釋的,只保留與問題相關的部分。

回答

0

我需要在其他兩個需求之上添加Context.MODE_MULTI_PROCESS。哪些只適用於較新的API。