iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Mobile Development

Android Studio開發系列 第 20

【DAY 20】元件介紹:SharedPreferences

  • 分享至 

  • xImage
  •  

今天這篇文章我們來介紹SharedPreferences,他是一種方法,可以讓我們將資料儲存在手機上,即使我們重新寫入新的程式,這筆資料還是會保存下來,並且可以重新取得。

如果只是儲存少許資料,不想花費時間建置龐大的資料庫,那麼我們可以利用它達成類似於資料庫的效果,下面我們就來看看實際例子:

如上所示,儲存資料後,就會顯示我們之前儲存的資料。



而如上所示,只要重新寫入新的資料就會將之前的舊資料覆蓋掉。

這樣就能夠將使用者的資料暫時儲存,下就來看看如何做出一個簡易的存取程式:
activity_main.xml:
介面部分較簡單,只需一個輸入框和兩個按鈕,一個為顯示資料的按鈕,一個為儲存資料的按鈕。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.353" />

    <Button
        android:id="@+id/buttonSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="儲存資料"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.81"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.499" />

    <Button
        android:id="@+id/buttonGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="顯示資料"

        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.199"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

而接著我們要新增一個class叫Shpf,它定義了getData的方法與setData的方法。

public class Shpf {
    //宣告變數
    private static String Data="Data";
    private SharedPreferences shpf;
    private Context context;

    public Shpf(Context context){
        this.context=context;
        //設定SharedPreferences的模式,設定為只有自己的app名稱才可以讀寫。
        shpf=this.context.getSharedPreferences(String.valueOf(R.string.app_name), Context.MODE_PRIVATE);
    }
    //getData的方法
    public String getData(){
        return shpf.getString(Data,"");
    }
    //setData的方法
    public void setData(String data){
        shpf.edit().putString(Data,data).apply();
    }
}

接下來,我們要定義兩個函式,分別為getDataOnClick()和setDataOnClick(),它們是定義當按鈕點擊時,呼叫shpf的getData方法與呼叫shpf的setData方法。

public void getDataOnClick() {
        //呼叫shpf的getData方法
        data.setText(shpf.getData());
    }

    public void setDataOnClick() {
        //呼叫shpf的setData方法
        shpf.setData(String.valueOf(data.getText()));
        data.setText("");
    }

最終的主程式就如下所示:
MainActivity:

public class MainActivity extends AppCompatActivity {
    //宣告變數
    private EditText data;
    private Button getData;
    private Button setData;
    private Shpf shpf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //綁定元件與變數
        data = (EditText) findViewById(R.id.editText);
        getData = (Button) findViewById(R.id.buttonGet);
        setData = (Button) findViewById(R.id.buttonSave);

        //綁定按鈕與函式
        getData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getDataOnClick();
            }
        });

        //綁定按鈕與函式
        setData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setDataOnClick();
            }
        });

        //新增一個Shpf物件
        shpf = new Shpf(this);

    }
    public void getDataOnClick() {
        //呼叫shpf的getData方法
        data.setText(shpf.getData());
    }

    public void setDataOnClick() {
        //呼叫shpf的setData方法
        shpf.setData(String.valueOf(data.getText()));
        data.setText("");
    }
}

結語:
SharedPreferences這個方法雖然能夠儲存少量的使用者資訊,但若是公司企業級別的龐大數據,還是要建置資料庫來儲存較為適合。

今天的元件介紹就到這裡,下篇文章見~~


上一篇
【DAY 19】元件應用:RecycleView-2-RecycleView資料跳轉
下一篇
【DAY 21】元件應用:tablayout-1-tablayout與viewPager2介紹
系列文
Android Studio開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言