首頁 > 軟體

Android入門之使用SharedPreference存取資訊詳解

2022-12-21 14:01:04

簡介

上一篇我們介紹了在android裡如何讀寫本地檔案。我們有一種場景,類似網頁的cookie,要把使用者的一些儲如上一次登入、使用的痕跡等資訊儲存下來以便於每次不需要做重複“填表單”的操作,當在這種場景下我們如果也使用本地檔案讀寫的話顯然是“太重”了。因此android提供了一種輕量級儲存叫SharedPreference專門用來儲存這種場景下的資料。

SharedPreference原理

比如下面這樣的一個登入介面,我們把使用者登入成功後的資訊儲存在SharedPreference中,這樣使用者下次開啟手機那麼相應的登入過的資訊就可以直接自動填充就可以了。這種場景我們就是使用的SharedPreference來做儲存的。

SharedPreference的儲存

SharedPreference一旦生成後,我們使用Android Studio裡的device file explorer

我們可以在datadata應用範例全package路徑裡的shared_prefs資料夾下可以看到我們生成的shared preference的.xml檔案。

開啟這個檔案我們看到了什麼?

後端程式碼

SharedPreferenceHelper.java

package org.mk.android.demo;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;
 
import java.util.HashMap;
import java.util.Map;
 
public class SharedPreferenceHelper {
 
    private final static String SP_TAG="demosp";
    private Context mContext;
 
    public SharedPreferenceHelper() {
    }
 
    public SharedPreferenceHelper(Context mContext) {
        this.mContext = mContext;
    }
    //定義一個儲存資料的方法
    public void save(String loginId, String password) {
        SharedPreferences sp = mContext.getSharedPreferences(SP_TAG, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("loginId", loginId);
        editor.putString("password", password);
        editor.commit();
        Toast.makeText(mContext, "資訊已寫入SharedPreference["+SP_TAG+"]中", Toast.LENGTH_SHORT).show();
    }
 
    //定義一個讀取SP檔案的方法
    public Map<String, String> read() {
        Map<String, String> data = new HashMap<String, String>();
        SharedPreferences sp = mContext.getSharedPreferences(SP_TAG, Context.MODE_PRIVATE);
        data.put("loginId", sp.getString("loginId", ""));
        data.put("password", sp.getString("password", ""));
        return data;
    }
}

HomePage.java

package org.mk.android.demo;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
import java.util.Map;
 
public class HomePage extends AppCompatActivity {
    private SharedPreferenceHelper spHelper;
    private Context ctx;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_page);
        Button buttonBack=(Button)findViewById(R.id.buttonBack);
        buttonBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }
    @Override
    protected void onStart() {
        super.onStart();
        ctx = getApplicationContext();
        spHelper = new SharedPreferenceHelper(ctx);
        Map<String, String> data = spHelper.read();
        Toast.makeText(ctx, "從SharedPreference中讀到資訊LoginId->" + data.get("loginId") + " password->" + data.get("password"), Toast.LENGTH_SHORT).show();
    }
}

MainActivity.java

package org.mk.android.demo;
 
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
 
import java.util.Map;
 
public class MainActivity extends AppCompatActivity {
    private EditText editLoginId;
    private EditText editPassword;
    private Button buttonLogin;
    private String strLoginId;
    private String strPassword;
    private SharedPreferenceHelper spHelper;
    private Context ctx;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ctx = getApplicationContext();
        spHelper = new SharedPreferenceHelper(ctx);
        bindView();
    }
 
    private void bindView(){
        editLoginId = (EditText)findViewById(R.id.editLoginid);
        editPassword = (EditText)findViewById(R.id.editPassword);
        buttonLogin = (Button)findViewById(R.id.buttonLogin);
        buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                strLoginId=editLoginId.getText().toString();
                strPassword=editPassword.getText().toString();
                spHelper.save(strLoginId,strPassword);
                Intent homeIt = new Intent(MainActivity.this, HomePage.class);
                startActivity(homeIt);
            }
        });
    }
    @Override
    protected void onStart() {
        super.onStart();
        ctx = getApplicationContext();
        spHelper = new SharedPreferenceHelper(ctx);
        Map<String, String> data = spHelper.read();
        Toast.makeText(ctx, "從SharedPreference中讀到資訊LoginId->" + data.get("loginId") + " password->" + data.get("password"), Toast.LENGTH_SHORT).show();
    }
}

核心程式碼導讀:

1.當我們點選了登入按鈕後,我們把當前使用者的登入資訊通過SharedPreferenceHelper儲存進demo_sp.xml這個SharedPreference檔案中去;

2.當我們每次切換到activity_main主介面時,在onStart中觸發讀取上次儲存進SharedPreference中的內容並以Toast顯示;

很簡單吧,自己動一下手試試吧。

以上就是Android入門之使用SharedPreference存取資訊詳解的詳細內容,更多關於Android SharedPreference存取資訊的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com