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