1. 程式人生 > >Android跨包訪問SharedPreferences空指標!

Android跨包訪問SharedPreferences空指標!

今天在做獲取SharedPreferences儲存的字串的時候,專案報出了空指標異常,定位後,發現是SharedPreferences呼叫get方法獲取的時候,報錯了,可是為什麼呢?想了很久,突然感覺應該是,我呼叫了另一個包下面的工具類。持著懷疑的態度,我去百度了….
經過百度,發現果然是跨包訪問出現的結果,可是我依賴了啊。
百度上說,在跨包訪問SharedPreferences時,訪問許可權不能設定成私有的。

SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE
_PRIVATE);

如果設定成上面這樣的話,在進行跨包訪問時,就會報錯了。如果想要在外部訪問SharedPreferences 的資料,我們需要把許可權設定成:Context.MODE_WORLD_READABLE

 SharedPreferences sp = context.getSharedPreferences(FILE_NAME,           Context.MODE_WORLD_READABLE);

看了別人的博文,上面說有一點值得注意,當使用這幾種許可權時,其他程式訪問資料時啟動本程式修改檔案資料,其他程式得到的還是快取資料得不到最新的資料,如果想要得到最新資料需要再新增一個許可權:Context.MODE_MULTI_PROCESS,

 SharedPreferences sp = context.getSharedPreferences(FILE_NAME,                Context.MODE_MULTI_PROCESS|Context.MODE_WORLD_READABLE);

如果不通過建立Context訪問其他應用的preference,可以以讀取xml檔案方式直接訪問其他應用preference對應的xml檔案,如:

File xmlFile = new File(“/data/data//shared_prefs/config.xml”);//應替換成應用的包名