Android SharedPreferences實現(xiàn)數(shù)據(jù)存儲功能
除了SQLite數(shù)據(jù)庫外,SharedPreferences也是一種輕型的數(shù)據(jù)存儲方式,不同于文件的存儲方式,SharedPreferences是使用鍵值對(key-value)數(shù)據(jù)的方式來存儲數(shù)據(jù)的。而且SharedPreferences還支持多種不同的數(shù)據(jù)類型存儲,因此,使用SharedPreferences來進行數(shù)據(jù)持久化要比使用文件方便很多,下面我們就來看一下它的具體用法吧。
如何將數(shù)據(jù)存儲到SharedPreferences中
要想使用SharedPreferences來存儲數(shù)據(jù),首先需要獲取到SharedPreferences對象。Android中主要提供了三種方法用于得到SharedPreferences對象。
1.Context類中的getSharedPreferences()方法
此方法接收兩個參數(shù),第一個參數(shù)用于指定SharedPreferences文件的名稱,如果指定的文件不存在則會創(chuàng)建一個,SharedPreferences文件都是存放在/data/data//shared_prefs/目錄下的。
第二個參數(shù)用于指定操作模式,主要有兩種模式可以選擇,MODE_PRIVATE和MODE_MULTI_PROCESS。MODE_PRIVATE仍然是默認(rèn)的操作模式,和直接傳入0效果是相同的,表示只有當(dāng)前的應(yīng)用程序才可以對這個SharedPreferences文件進行讀寫。MODE_MULTI_PROCESS則一般是用于會有多個進程中對同一個SharedPreferences文件進行讀寫的情況。類似地,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE這兩種模式已在Android 4.2版本中被廢棄。
2.Activity類中的getPreferences()方法
這個方法和Context中的getSharedPreferences()方法很相似,不過它只接收一個操作模式參數(shù),因為使用這個方法時會自動將當(dāng)前活動的類名作為SharedPreferences的文件名。
3.PreferenceManager類中的getDefaultSharedPreferences()方法
這是一個靜態(tài)方法,它接收一個Context參數(shù),并自動使用當(dāng)前應(yīng)用程序的包名作為前綴來命名SharedPreferences文件。
得到了SharedPreferences對象之后,就可以開始向SharedPreferences文件中存儲數(shù)據(jù)了,主要可以分為三步實現(xiàn)。
1.調(diào)用SharedPreferences對象的edit()方法來獲取一個SharedPreferences.Editor對象。
2.向SharedPreferences.Editor對象中添加數(shù)據(jù),比如添加一個布爾型數(shù)據(jù)就使用putBoolean方法,添加一個字符串則使用putString()方法,以此類推。
3.調(diào)用commit()方法將添加的數(shù)據(jù)提交,從而完成數(shù)據(jù)存儲操作。
不知不覺中已經(jīng)將理論知識介紹得挺多了,那我們就趕快通過一個例子來體驗一下SharedPreferences存儲的用法吧。
新建一個SharedPreferencesTest項目,然后修改activity_main.xml中的代碼,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save data"
/>
</LinearLayout>
這里我們只是簡單地放置了一個按鈕,用于將一些數(shù)據(jù)存儲到SharedPreferences文件當(dāng)中。
然后修改MainActivity中的代碼,如下所示:
public class MainActivity extends Activity {
private Button saveData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
saveData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",
MODE_PRIVATE).edit();
editor.putString("name", "Lily");
editor.putInt("age", 26);
editor.putBoolean("married", false);
editor.commit();
}
});
}
}
可以看到,這里首先給按鈕注冊了一個點擊事件,然后在點擊事件中通過getSharedPreferences()方法指定SharedPreferences的文件名為data,并得到了SharedPreferences.Editor對象。接著向這個對象中添加了三條不同類型的數(shù)據(jù),最后調(diào)用commit()方法進行提交,從而完成了數(shù)據(jù)存儲的操作。
那么接下來我們自然要看一看,如何從SharedPreferences文件中去讀取這些數(shù)據(jù)了。
從SharedPreferences中讀取數(shù)據(jù)
SharedPreferences對象中提供了一系列的get方法用于對存儲的數(shù)據(jù)進行讀取,每種get方法都對應(yīng)了SharedPreferences. Editor中的一種put方法,比如讀取一個布爾型數(shù)據(jù)就使用getBoolean()方法,讀取一個字符串就使用getString()方法。這些get方法都接收兩個參數(shù),第一個參數(shù)是鍵,傳入存儲數(shù)據(jù)時使用的鍵就可以得到相應(yīng)的值了,第二個參數(shù)是默認(rèn)值,即表示當(dāng)傳入的鍵找不到對應(yīng)的值時,會以什么樣的默認(rèn)值進行返回。
我們還是通過例子來實際體驗一下吧,仍然是在SharedPreferencesTest項目的基礎(chǔ)上繼續(xù)開發(fā),修改activity_main.xml中的代碼,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save data"
/>
<Button
android:id="@+id/restore_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Restore data"
/>
</LinearLayout>
這里增加了一個還原數(shù)據(jù)的按鈕,我們希望通過點擊這個按鈕來從SharedPreferences文件中讀取數(shù)據(jù)。
修改MainActivity中的代碼,如下所示:
public class MainActivity extends Activity {
private Button saveData;
private Button restoreData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
restoreData = (Button) findViewById(R.id.restore_data);
……
restoreData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
Log.d("MainActivity", "name is " + name);
Log.d("MainActivity", "age is " + age);
Log.d("MainActivity", "married is " + married);
}
});
}
}
可以看到,我們在還原數(shù)據(jù)按鈕的點擊事件中首先通過getSharedPreferences()方法得到了SharedPreferences對象,然后分別調(diào)用它的getString()、getInt()和getBoolean()方法去獲取前面所存儲的姓名、年齡和是否已婚,如果沒有找到相應(yīng)的值就會使用方法中傳入的默認(rèn)值來代替,最后通過Log將這些值打印出來。
通過這個簡單的例子,我們就了解了如何利用SharedPreferences實現(xiàn)數(shù)據(jù)存儲。相比之下,SharedPreferences存儲確實要比文本存儲簡單方便了許多,應(yīng)用場景也多了不少,比如很多應(yīng)用程序中的偏好設(shè)置功能其實都使用到了SharedPreferences技術(shù)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- android?studio數(shù)據(jù)存儲建立SQLite數(shù)據(jù)庫實現(xiàn)增刪查改
- Android 通過SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)存儲管理
- Android四種數(shù)據(jù)存儲的應(yīng)用方式
- Android基礎(chǔ)教程數(shù)據(jù)存儲之文件存儲
- android使用SharedPreferences進行數(shù)據(jù)存儲
- Android開發(fā)教程之ContentProvider數(shù)據(jù)存儲
- 詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲
- 5種Android數(shù)據(jù)存儲方式匯總
- 詳解Android數(shù)據(jù)存儲之SQLCipher數(shù)據(jù)庫加密
- Android 單例模式實現(xiàn)可復(fù)用數(shù)據(jù)存儲的詳細過程
相關(guān)文章
Android開發(fā)中g(shù)radle下載緩慢的問題級解決方法
本文介紹了解決Android開發(fā)中Gradle下載緩慢問題的幾種方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2025-02-02
Qt5.12.6配置Android Arm開發(fā)環(huán)境(圖文)
本文主要介紹了Qt5.12.6配置Android Arm開發(fā)環(huán)境,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法
Tablayout在我們?nèi)粘i_發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了在Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法,文中給出了詳細的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。2017-06-06
Android利用Canvas標(biāo)點畫線并加入位移動畫(2)
這篇文章主要為大家詳細介紹了Android利用Canvas標(biāo)點畫線并加入位移動畫的第二篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09
RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果
這篇文章主要為大家詳細介紹了RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android使用ViewPager實現(xiàn)啟動引導(dǎo)頁
這篇文章主要為大家詳細介紹了Android使用ViewPager實現(xiàn)第一次啟動引導(dǎo)頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
退出Android程序時清除所有activity的實現(xiàn)方法
這篇文章主要介紹了退出Android程序時清除所有activity的實現(xiàn)方法,詳細分析了Android退出時清除activity的原理與實現(xiàn)技巧,需要的朋友可以參考下2016-04-04

