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”);//應替換成應用的包名

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com