SharedPreference
App若想儲存一些簡單的資料, 不希望離開App後資料就消失. 而在下次再度開啟App時, 能把上次執行時的資料重現出來. 此時需使用SharedPreference處理
首先在activity_main.xml設定畫面如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.asuscomm.mahaljsp.ch12_01_sharedpreference.MainActivity"
android:orientation="vertical">
<TextView
android:text="帳號"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editAccount"/>
<TextView
android:text="密碼"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editPassword"/>
<TextView
android:text="電話"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView3"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editTel"/>
<Button
android:onClick="btSave_click"
android:text="儲存"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btSave" />
<Button
android:onClick="btClear_click"
android:text="清除"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btClear" />
<Button
android:onClick="btRead_click"
android:text="讀取"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btRead" />
</LinearLayout>
在程式碼中
1. 取得SharedPreference sp物件
常用的方法為PreferenceManager.getDefaultSharedPreferences(Context).
當資料需分群組時, 亦可使用Activity的getSharedPreference(String, MODE_PRIVATE)
2. sp.edit() 取得SharedPreference.Editor edtior物件. 此物件可用如下方法
putString(String, String);
putInt(String, int);
putBoolean(String, boolean);
putFloat(String, float);
putLong(String, long);
clear() : 清除資料
remove(String): 移除指定資料
commit() : 儲存資料
apply() : 同commit(), 但因為使用了cache, 效能比commit()更好
3. sp.getXXX(String, default) : 如getString, getInt, getFloat等, default是當取不到資料時的預設值
下列程式碼輸入完資料並按儲存後, 關閉App, 再重新打開, 會自動將上次的資料重新讀回
public class MainActivity extends AppCompatActivity {
private static final String ACCOUNT="Account";
private static final String PASSWORD="Password";
private static final String TEL="Tel";
Button btSave, btClear, btRead;
EditText editAccount, editPassword, editTel;
SharedPreferences sp;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
processViews();
}
public void processViews(){
editAccount=(EditText)findViewById(R.id.editAccount);
editPassword=(EditText)findViewById(R.id.editPassword);
editTel=(EditText)findViewById(R.id.editTel);
sp= PreferenceManager.getDefaultSharedPreferences(this);
editor=sp.edit();
readData();
}
public void saveData(){
editor.putString(ACCOUNT, editAccount.getText().toString());
editor.putString(PASSWORD, editPassword.getText().toString());
editor.putString(TEL, editTel.getText().toString());
editor.apply();
}
public void clearData(){
editor.clear();
editor.apply();
readData();
}
public void readData(){
editAccount.setText(sp.getString(ACCOUNT, ""));
editPassword.setText(sp.getString(PASSWORD, ""));
editTel.setText(sp.getString(TEL, ""));
}
public void btRead_click(View view){
readData();
}
public void btSave_click(View view){
saveData();
}
public void btClear_click(View view){
clearData();
}
}
