android數據存儲之SharedPreferences方式 – Android移動開發技術文章_手機開發 Android移動開發教學課程

 

在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(); 

            } 

        }); 

    } 

}    

該程序就是簡單的實現寫入數據讀取數據;

 

簡單的界面如下圖:

 

作者 rhljiayou

發佈留言