編輯:關於Android編程
在Android開發中,經常會遇到這樣一種情況,即需要將用戶偏好設置(如用戶偏好的app色彩主題)、與特定登錄用戶相關的設置(如不同登陸用戶的偏好)、整個app的生命周期內的設置(如首次登陸顯示介紹頁)存儲在用戶本地,那麼首先考慮使用sharedPreferences。這是Android中專門用來存儲輕量級鍵值對數據的類,會在本地以xml文件形式存儲。
一、 運行機制
接口:SharedPreferencesImpl在該接口中,定義了一個Editor接口、一個edit方法、多個get方法、一個監聽器用於監聽內容變更。其中,Editor接口主要用來寫入數據,edit方法用來對外提供一個editor實例,get方法用來獲取鍵值對,監聽器用於實現類中監聽。
接口:Editor接口中含有多個put方法、一個commit方法等。之所以要獨立出一個接口來進行寫操作,是為了保證數據寫入的完整性。主要考慮的場景是如果同時要寫入多條鍵值對,這些鍵值對不會逐條寫入文件中,而是先打包在一起,再一次性寫入,即one-at-a-time。具體實現方法是在Editor實現一個hashMap來暫存要寫入的數據,先把所有鍵值對寫入內存中的該hashMap中,然後再一次性寫入文件中。
該過程可以概括為先commitToMemory, 再writeToFile。
二、 使用方法
首先,想寫入鍵值對,要先獲取一個sharedPreferences對象。
此時需要提供兩個要素:context上下文對象,對應的文件名字。
這裡,我們要明確這些鍵值對的實際存儲方式:它們是以多個文件的形式存儲: /data/data/{packageName}/shared_prefs/{name}.xml。其中,實際的{name}.xml是在程序中指定的。
那麼,我們只要調用context.getSharedPreferences(name, mode)即可獲取到所在packageName文件夾裡對應的name.xml文件映射過來的SharedPreferences對象。其中,mode是讀取文件的方式。
示例:
1、使用SharedPreferences保存數據方法如下:
//實例化SharedPreferences對象(第一步) SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); //實例化SharedPreferences.Editor對象(第二步) SharedPreferences.Editor editor = mySharedPreferences.edit(); //用putString的方法保存數據 editor.putString("name", "Karl"); editor.putString("habit", "sleep"); //提交當前數據 editor.commit(); //使用toast信息提示框提示成功寫入數據 Toast.makeText(this, "數據成功寫入SharedPreferences!" , Toast.LENGTH_LONG).show();
執行以上代碼,SharedPreferences將會把這些數據保存在test.xml文件中,可以在File Explorer的data/data/相應的包名/test.xml 下導出該文件,並查看。
2、使用SharedPreferences讀取數據方法如下:
//同樣,在讀取SharedPreferences數據前要實例化出一個SharedPreferences對象 SharedPreferencessharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); // 使用getString方法獲得value,注意第2個參數是value的默認值 String name =sharedPreferences.getString("name", ""); String habit =sharedPreferences.getString("habit", ""); //使用toast信息提示框顯示信息 Toast.makeText(this, "讀取數據如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit, Toast.LENGTH_LONG).show();
三、理解
我們可以簡單的理解為:在手機本地某個地方會存放我們自定義的xml文件,每個文件用來存放相關的鍵值對數據。比如我們希望存儲用戶的偏好設置,即可創建一個名為UserPref的SharedPreferences並讀寫即可。
四、比較getSharedPreferenced和getPreference
getSharedPreferenced獲取的文件是在package內都可以使用context對象獲取到的,只需要指定name就可以獲取到特定的xml文件。
但是,getPreference方法是專門用在Activity內部的,創建的xml文件只能在該Activity上下文內獲取,而且不需要指定名字,這個xml文件只屬於這個Activity。
其它就沒有區別了。唯一區別就是一個權限域的區別。
示例:
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences("userPref", MODE_PRIVATE); SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
本文實例講述了Android編程布局控件之AbsoluteLayout用法。分享給大家供大家參考,具體如下:AbsoluteLayout是絕對布局管理器,指的是指定組件的
最近做的項目中需要實現斷點下載,即用戶一次下載可以分多次進行,下載過程可以中斷,在目前大多數的帶離線緩存的軟件都是需要實現這一功能。本文闡述了通過sqlite3簡單實現了
因為最近有人問我怎麼保存HttpClient的Cookie, 所以這裡寫下, 順便記錄總結吧. 當然, 有Android網絡編程經歷的童鞋一看就懂喇~ 就不多說
LinearLayout是線性布局控件:要麼橫向排布,要麼豎向排布常用屬性:android:gravity------------設置的是控件自身上面的內容位置andro