在Android中,可供選擇的存儲方式有SharedPreferences、文件存儲、SQLite數據庫方式、內容提供器(Content provider)和網絡。
今兒個咱學SharedPreferences:
有些時候,應用程序有少量的數據需要保存,而且這些數據的格式很簡單:都是普通的字符串、標量類型的值等,比如應用程序的各種配置信息、小遊戲的於玩家積分等,對於這種數據,提供了SharedPreferences進行保存;可以想象它是一個小小的Cookie,它通過用鍵值對的方式把簡單數據類型(boolean、int、float、long和String)存儲在應用程序的私有目錄下(data/data/包名/shared_prefs/)自己定義的xml文件中。
1、說明
它提供一種輕量級的數據存儲方式,通過eidt()方法來修改裏面的內容,通過Commit()方法來提交修改後的內容。
2、重要方法
public abstract boolean contains (Stringkey) :檢查是否已存在該文件,其中key是xml的文件名。
edit():爲preferences創建一個編輯器Editor,通過創建的Editor可以修改preferences裏面的數據,但必須執行commit()方法。
getAll():返回preferences裏面的多有數據。
getBoolean(String key, boolean defValue):獲取Boolean型數據
getFloat(String key, float defValue):獲取Float型數據
getInt(String key, int defValue):獲取Int型數據
getLong(String key, long defValue):獲取Long型數據
getString(String key, String defValue):獲取String型數據
registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):註冊一個當preference發生改變時被調用的回調函數。
unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):刪除當前回調函數。
3、重要接口SharedPreferences.Editor
用於修改SharedPreferences對象的內容,所有更改都是在編輯器所做的批處理,而不是複製回原來的SharedPreferences或持久化存儲,直到你調用commit(),纔將持久化存儲。重要方法:
clear():清除內容。
commit():提交修改
remove(String key):刪除preference
下面通過一個簡單的實例來示範如何向SharedPreferences中寫入、讀取數據;
佈局文件很簡單:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center_horizontal"
- >
- <Button
- android:id="@+id/write"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/write"
- />
- <Button
- android:id="@+id/read"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/read"
- />
- </LinearLayout>
程序代碼如下:
- package org.crazyit.io;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- public class SharedPreferencesTest extends Activity
- {
- SharedPreferences preferences;
- SharedPreferences.Editor editor;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 獲取只能被本應用程序讀、寫的SharedPreferences對象
- preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);
- editor = preferences.edit();
- Button read = (Button) findViewById(R.id.read);
- Button write = (Button) findViewById(R.id.write);
- read.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- //讀取字符串數據
- String time = preferences.getString("time", null);
- //讀取int類型的數據
- int randNum = preferences.getInt("random", 0);
- String result = time == null ? "您暫時還未寫入數據"
- : "寫入時間爲:" + time
- + "\n上次生成的隨機數爲:" + randNum;
- //使用Toast提示信息
- Toast.makeText(SharedPreferencesTest.this ,
- result , 5000)
- .show();
- }
- });
- write.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
- + "hh:mm:ss");
- // 存入當前時間
- editor.putString("time", sdf.format(new Date()));
- // 存入一個隨機數
- editor.putInt("random", (int) (Math.random() * 100));
- // 提交所有存入的數據
- editor.commit();
- }
- });
- }
- }
簡單的界面如下圖: