SharedPreferences應用間讀取,修改後讀取問題的解決
阿新 • • 發佈:2019-01-23
最近專案中需要兩個應用間公用資料,由於考慮到只有少量標識需要共享,就考慮用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應用中讀取:
能讀取到A應用中key1對應的值。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對應的值修改後,退出應用,B應用再讀取的時候,讀出的值仍然為第一次讀到的值。怎樣才能做到讓B應用同步獲取該值呢?
只需要將B應用中的
SharedPreferences settings = context.getSharedPreferences("test", MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
修改為
SharedPreferences settings = context.getSharedPreferences("test", MODE_MULTI_PROCESS);
即可。
具體原因應該是髒讀問題,等有空再研究吧