使用Preference儲存偏好設定

Preference Demo

在Android上儲存資料的方式之一,是使用Preference來儲存,雖然這個類別看起來好像只能儲存"偏好設定",但其實可以依你的需求來儲存少量化的任何資料。
首先,你必須在 Activity 中取得 Preferences 物件:
SharedPreferences pref = getSharedPreferences("自訂名稱", 0);
接著你就能存入資料:
pref.edit().putString("資料關鍵字key", "資料內容value").commit();
除了可以 put 字串外,還有數字及布林值可以儲存。接著就可以取出資料:
String info = pref.getString("資料關鍵字key", "在取不到資料時的預設值");
就這麼簡單。記得 put 字串就要用相對應的 get 字串方法來取資料,例如 putInt 就要用 getInt 來取。

範例解說

如截圖所示,我建立了 2 個文字輸入區,3 個按鈕。Save 按鈕會把上方的文字輸入區中的文字存入 Preference,Load 按鈕會把 Preference 中的資料取出並在下方的文字輸入區顯示。當按下 Exit 按鈕把 App 關閉後,當 App 再度開啟時,直接按下 Load 按鈕,資料就會直接取回並在下方文字區顯示。

範例程式碼

package com.tonycube.demo;

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.TextView;

public class PreferencesDemoActivity extends Activity implements OnClickListener {

    private final String PREF_SETTING = "SETTING";
    private SharedPreferences pref = null;
    
    private TextView txtInput = null;
    private TextView txtOutput = null;
    private Button btnSave = null;
    private Button btnLoad = null;
    private Button btnExit = null;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        initView();
    }
    
    private void initView(){
        txtInput = (TextView) findViewById(R.id.txtInput);
        txtOutput = (TextView) findViewById(R.id.txtOutput);
        btnSave = (Button) findViewById(R.id.btnSave);
        btnLoad = (Button) findViewById(R.id.btnLoad);
        btnExit = (Button) findViewById(R.id.btnExit);
        
        btnSave.setOnClickListener(this);
        btnLoad.setOnClickListener(this);
        btnExit.setOnClickListener(this);
        
        pref = getSharedPreferences(PREF_SETTING, 0);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnSave:
            pref.edit().putString("info", txtInput.getText().toString()).commit();
            break;
            
        case R.id.btnLoad:
            String info = pref.getString("info", "default value");
            txtOutput.setText(info);
            break;

        case R.id.btnExit:
            finish();
            break;
            
        default:
            break;
        }
    }
}
本文網址:http://blog.tonycube.com/2011/11/preferences.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

2 則留言

  1. 請教一下,如果想用editText 輸入的文字去建一個Preference
    不知道能不能達成

    回覆刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。