今天我們來學習做SharedPreferences,SharedPreferences它是一種資料存儲方式,且每個APP的SharedPreferences是各自獨立的,如果APP解除安裝資料也一併刪除。
SharedPreferences常用來儲存簡輕量的資料,如:使用者帳號、名稱等。
大概了解SharedPreferences後,我們來進入實作範例更清楚~
(完整程式碼)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/main_theme_tv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.05"
android:background="#DFA7A7"
android:gravity="center"
android:text="SharedPreferences範例"
android:textSize="24sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.05"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.05"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.02"/>
<EditText
android:id="@+id/main_msg_et"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:ems="10"
android:inputType="text"
android:hint="輸入" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.02"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.05"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
android:layout_weight="0.05">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.05"/>
<Button
android:id="@+id/main_getMsg_btn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:textSize="20dp"
android:text="拿取" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.05"/>
<Button
android:id="@+id/main_setMsg_btn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:textSize="20dp"
android:text="存取" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.05"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.1"/>
</LinearLayout>
這次還要新增一個Java Class,對自己的com.example.檔案 右鍵 > New > 點擊 Java Class
命名完成
(完整程式碼)
public class Sp {
private static String Msg = "msg";
private SharedPreferences spf;
private Context context;
public Sp(Context context){
this.context = context;
spf = this.context.getSharedPreferences((context.getResources().getString(R.string.app_name)),Context.MODE_PRIVATE);
}
//放入的方法,前面的"Msg"為Key。
public void setmsg(String msg){
spf.edit().putString(Msg,msg).apply();
}
//拿取的方法,前面的"Msg"為Key。
public String getmsg(){
return spf.getString(Msg,"");
}
}
程式碼 | 說明 |
---|---|
MODE_PRIVATE | 只允許該APP存取 |
MODE_WORLD_READABLE | 所有APP都能讀取 |
MODE_WORLD_WRITEABLE | 所有APP都能存取、寫入 |
MODE_MULTI_PROCESS | 允許多個process 同時存取 |
將於EditText輸入的文字按下按鈕後,轉成String進行存取,之後再按下按鈕於Sp中拿取之前存取的文字。
(完整程式碼)
public class MainActivity extends AppCompatActivity {
//宣告
private EditText nameEditText;
private Button setButton;
private Button getButton;
private Sp sp;
private Context context=this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
//綁定
nameEditText = findViewById(R.id.main_msg_et);
setButton = findViewById(R.id.main_setMsg_btn);
getButton = findViewById(R.id.main_getMsg_btn);
sp = new Sp(this);
getButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
nameEditText.setText(sp.getmsg());
Toast.makeText(context,"已拿取",Toast.LENGTH_SHORT).show();
}
});
setButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sp.setmsg(String.valueOf(nameEditText.getText().toString()));
nameEditText.setText("");
Toast.makeText(context,"已存取",Toast.LENGTH_SHORT).show();
}
});
}
}
(剛開始)
(輸入文字點擊存取)
(點擊按鈕拿取文字)
成功拿取到文字~
如果關閉APP也是可以拿到之前存取的文字喔!