1. 程式人生 > >SharedPreferences應用間讀取,修改後讀取問題的解決

SharedPreferences應用間讀取,修改後讀取問題的解決

最近專案中需要兩個應用間公用資料,由於考慮到只有少量標識需要共享,就考慮用sharedpreferences生成XML進行資料儲存。

需求如下:A應用中生成xml檔案,並存儲一個鍵值對 key-value.

    A應用會對value進行維護修改

    B應用獲取該xml檔案中key對應的value。

我在A應用中生成並寫入相應資料:

SharedPreferences sp = getSharedPreferences("test", MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
        sp.edit().putString("key1", "value").commit();
        Log.i("shared", sp.getString("key1", "0"));

在B應用中讀取:
Context context = null;
try {
	context = createPackageContext("com.me.myfirsttest",CONTEXT_IGNORE_SECURITY);//"com.me.myfirsttest"是應用A的包名
	} catch (NameNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
    }
	SharedPreferences settings = context.getSharedPreferences("test", MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
	String userName = settings.getString("key1", "default");
	Toast.makeText(getApplicationContext(), userName, 1).show();
能讀取到A應用中key1對應的值。

但是當A應用中key1對應的值修改後,退出應用,B應用再讀取的時候,讀出的值仍然為第一次讀到的值。怎樣才能做到讓B應用同步獲取該值呢?

只需要將B應用中的

SharedPreferences settings = context.getSharedPreferences("test", MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
修改為

SharedPreferences settings = context.getSharedPreferences("test", MODE_MULTI_PROCESS);

即可。

具體原因應該是髒讀問題,等有空再研究吧