1. 介紹:SharedPreferences 的作用是使用鍵值對的方式存儲數據。且支持多種不同的數據類型存儲;
Android數據持久化方法中最簡單的一種,即使用Preferences的鍵值對存儲方式。這種方式主要用來存儲比較簡單的一些數據, 而且是標准的Boolean、Int、Float、Long、String等類型。
android.content.SharedPreferences是一個接口,用來獲取和修改持久化存儲的數據。
有三種獲取系統中保存的持久化數據的方式:
a).this.getPreferences (int mode)
通過Activity對象獲取,獲取的是本Activity私有的Preference,保存在系統中的xml形式的文件的名稱為這個Activity的名字,因此一個Activity只能有一個,屬於這個Activity。
b).this.getSharedPreferences (String name, int mode)
因為Activity繼承了ContextWrapper,因此也是通過Activity對象獲取,但是屬於整個應用程序,可以有多個,以第一參數的name為文件名保存在系統中。
c).PreferenceManager.getDefaultSharedPreferences(this);
PreferenceManager的靜態函數,保存PreferenceActivity中的設置,屬於整個應用程序,但是只有一個,Android會根據包名和PreferenceActivity的布局文件來起一個名字保存。
安卓中主要使用了三種方法用於得到SharePreferences對象。本結主要介紹conext類中的getSharedPreferences()方法。
2. 獲取到SharedPreferences對象后,就可以向文件中寫數據,或者從中讀數據;主要分為三步實現:
a) 調用SharedPreferences對象的edit()方法來獲取一個SharePreferences.Editor對象。
b) 向SharePreferences.Editor對象中添加數據,比如添加一個string類型,就使用putString()方法;
c) 調用commit()方法將添加的數據提交,從而完成數據的存儲操作。
3. 下面舉例說明數據的存儲於讀取。
定義了兩個button, 一個用於觸發存儲數據, 一個用戶觸發讀數據;
package com.exmple.xxx.sharepreferencestest; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button button; private Button restoreBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences.Editor editor = getSharedPreferences("testData", MODE_PRIVATE).edit(); editor.putString("name", "leavescy"); editor.putInt("age", 24); editor.putBoolean("married", false); editor.commit(); } }); restoreBtn = findViewById(R.id.restoreBtn); restoreBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences pref = getSharedPreferences("testData", MODE_PRIVATE); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false); Log.i("MainActivity", "name is " + name); Log.i("MainActivity", "age is " + age); Log.i("MainActivity", "married is " + married); } }); } }
在點擊SAVE DATA button后, 會將數據存儲到
打開testData, 數據為:
此時發現存儲的數據確實是以鍵值對的方式存儲了,且存儲為xml格式;
點擊Restore Data button時, 數據被讀出來,並打印出日志: