天天看點

Android資料存儲(一):SharedPreferences存儲簡介将資料存儲到SharedPreferences中從SharedPreferences中讀取資料

簡介

SharedPreferences是使用鍵值對的方式來存儲資料的。也就是說當儲存一條資料時,需要給這條資料提供一個對應的鍵,這樣在讀取資料的時候就可以通過這個鍵把相應的值取出來。而且SharedPreferences還支援多種不同的資料類型存儲,如果存儲的資料類型是整型,那麼讀取出來的資料也是整型的,存儲的資料是一個字元串,讀取出來的資料仍然是字元串。

将資料存儲到SharedPreferences中

要想使用SharedPreferences存儲資料,首先需要擷取到SharedPreferences對象。

Android中主要提供了三種方法用于得到SharedPreferences對象。

  1. Context類中的getSharedPreferences()方法 此方法接收兩個參數:
    • 參數1:用于指定SharedPreferences檔案的名稱,如果指定的檔案不存在則會建立一個,SharedPreferences檔案都是存放在/data/data//shared_prefs/目錄下的。
    • 參數2:用于指定操作模式,主要有兩種模式可以選擇,MODE_PRIVATE和MODE_MULTI_PROCESS。MODE_PRIVATE仍然是預設的操作模式,和直接傳入0效果是相同的,表示隻有目前的應用程式才可以對這個SharedPreferences檔案進行讀寫。MODE_MULTI_PROCESS則一般是用于會有多個程序中對同一個SharedPreferences檔案進行讀寫的情況。
  2. Activity類中的getPreferences()方法

    這個方法和Context中的getSharedPreferences()方法很相似,不過它隻接收一個操作模式參數,因為使用這個方法時會自動将目前活動的類名作為SharedPreferences的檔案名。

  3. PreferenceManager類中的getDefaultSharedPreferences()方法

    這是一個靜态方法,它接收一個Context參數,并自動使用目前應用程式的包名作為字首來命名SharedPreferences檔案。

得到SharedPreferences對象之後,就可以開始向SharedPreferences檔案中存儲資料了,主要可以分為三步實作:

  1. 調用SharedPreferences對象的edit()方法來擷取一個SharedPreferences.Editor對象。
  2. 向SharedPreferences.Editor對象中添加資料,比如添加一個布爾型資料就使用putBoolean方法,添加一個字元串則使用putString()方法,以此類推。
  3. 調用commit()方法将添加的資料送出,進而完成資料存儲操作。

接下來體驗一下SharedPreferences存儲的用法。建立一個Android項目,添加activity_shared_preferences.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_shared_preferences"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="儲存資料" />

</LinearLayout>
           

添加DataStorageSharedPreferences.java,代碼如下:

public class DataStorageSharedPreferences extends Activity {

    private Button mSaveDataButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shared_preferences);
        mSaveDataButton = (Button) findViewById(R.id.save_data_shared_preferences);
        mSaveDataButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("name", "Tomcat");
                editor.putInt("age", );
                editor.putBoolean("married", false);
                editor.commit();
            }
        });
    }

}
           

點選事件中通過getSharedPreferences()方法指定SharedPreferences的檔案名為data,并得到了SharedPreferences.Editor對象。接着向這個對象中添加了三條不同類型的資料,最後調用commit()方法進行送出,進而完成了資料存儲的操作。

運作程式,點選一下“儲存資料”按鈕,這時資料就儲存成功了,不過為了要證明一下,我們還是要借助File Explorer來進行檢視。切換到DDMS視圖,并點選File Explorer切換卡,然後進入到/data/data/com.knittedschool/shared_prefs /data.xml檔案,如下圖所示:

Android資料存儲(一):SharedPreferences存儲簡介将資料存儲到SharedPreferences中從SharedPreferences中讀取資料

将data.xml檔案導出到電腦上,并打開檢視,如下圖所示:

Android資料存儲(一):SharedPreferences存儲簡介将資料存儲到SharedPreferences中從SharedPreferences中讀取資料

從SharedPreferences中讀取資料

SharedPreferences對象中提供了一系列的get方法用于對存儲的資料進行讀取,每種get方法都對應了SharedPreferences. Editor中的一種put方法,比如讀取一個布爾型資料就使用getBoolean()方法,讀取一個字元串就使用getString()方法。這些get方法都接收兩個參數,第一個參數是鍵,傳入存儲資料時使用的鍵就可以得到相應的值了,第二個參數是預設值,即表示當傳入的鍵找不到對應的值時,會以什麼樣的預設值進行傳回。

修改activity_shared_preferences.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_shared_preferences"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="儲存資料" />

    <Button
        android:id="@+id/read_data_shared_preferences"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="讀取資料" />

</LinearLayout>
           

修改DataStorageSharedPreferences.java中的代碼,如下代碼:

public class DataStorageSharedPreferences extends Activity {

    private static final String TAG = "DataStorageSharedPreferences";
    private Button mSaveDataButton;
    private Button mReadDataButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shared_preferences);
        mSaveDataButton = (Button) findViewById(R.id.save_data_shared_preferences);
        mSaveDataButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("name", "Tomcat");
                editor.putInt("age", );
                editor.putBoolean("married", false);
                editor.commit();
            }
        });

        mReadDataButton = (Button) findViewById(R.id.read_data_shared_preferences);
        mReadDataButton.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", );
                boolean married = pref.getBoolean("married", false);
                Log.d(TAG, "Name:" + name);
                Log.d(TAG, "Age:" + age);
                Log.d(TAG, "Married:" + married);
            }
        });
    }

}
           

可以看到,我們在還原資料按鈕的點選事件中首先通過getSharedPreferences()方法得到了SharedPreferences對象,然後分别調用它的getString()、getInt()和getBoolean()方法去擷取前面所存儲的姓名、年齡、是否已婚,如果沒有找到相應的值就會使用方法中傳入的預設值來代替,最後通過Log将這些值列印出來。

運作程式,并點選界面上的”讀取資料“按鈕,然後檢視LogCat中的列印資訊,如下圖所示:

Android資料存儲(一):SharedPreferences存儲簡介将資料存儲到SharedPreferences中從SharedPreferences中讀取資料