Android入門之使用SharedPreference存取信息詳解
簡介
上一篇我們介紹了在android里如何讀寫本地文件。我們有一種場景,類似網(wǎng)頁的cookie,要把用戶的一些儲如上一次登錄、使用的痕跡等信息保存下來以便于每次不需要做重復(fù)“填表單”的操作,當(dāng)在這種場景下我們?nèi)绻彩褂帽镜匚募x寫的話顯然是“太重”了。因此android提供了一種輕量級存儲叫SharedPreference專門用來存儲這種場景下的數(shù)據(jù)。
SharedPreference原理
比如下面這樣的一個登錄界面,我們把用戶登錄成功后的信息保存在SharedPreference中,這樣用戶下次打開手機(jī)那么相應(yīng)的登錄過的信息就可以直接自動填充就可以了。這種場景我們就是使用的SharedPreference來做存儲的。

SharedPreference的存儲
SharedPreference一旦生成后,我們使用Android Studio里的device file explorer

我們可以在data\data\應(yīng)用實例全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;
}
//定義一個保存數(shù)據(jù)的方法
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();
}
}核心代碼導(dǎo)讀:
1.當(dāng)我們點擊了登錄按鈕后,我們把當(dāng)前用戶的登錄信息通過SharedPreferenceHelper保存進(jìn)demo_sp.xml這個SharedPreference文件中去;
2.當(dāng)我們每次切換到activity_main主界面時,在onStart中觸發(fā)讀取上次保存進(jìn)SharedPreference中的內(nèi)容并以Toast顯示;


很簡單吧,自己動一下手試試吧。
以上就是Android入門之使用SharedPreference存取信息詳解的詳細(xì)內(nèi)容,更多關(guān)于Android SharedPreference存取信息的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實現(xiàn)獲取未接來電和未讀短信數(shù)量的方法
這篇文章主要介紹了Android實現(xiàn)獲取未接來電和未讀短信數(shù)量的方法,是Android程序開發(fā)中非常常見的重要功能,需要的朋友可以參考下2014-08-08
Android Vitamio和ExoPlayer兩種播放器優(yōu)劣分析
Vitamio和ExoPlayer都是用于安卓平臺的視頻播放器庫,它們各有優(yōu)缺點,具體使用哪一個,需要根據(jù)你的實際需求、開發(fā)經(jīng)驗、項目規(guī)模等多個因素綜合考慮2023-04-04
淺析Android手機(jī)衛(wèi)士之手機(jī)實現(xiàn)短信指令獲取位置
這篇文章主要介紹了淺析Android手機(jī)衛(wèi)士之手機(jī)實現(xiàn)短信指令獲取位置的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android 5.0 實現(xiàn)水波擴(kuò)散效果
這篇文章主要為大家詳細(xì)介紹了Android 5.0 實現(xiàn)水波擴(kuò)散效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Android實現(xiàn)Back功能代碼片段總結(jié)
今天把在公司實現(xiàn)某功能所用到的Back鍵功能模塊代碼片段做一個整理。方便以后直接拿出來使用2014-09-09
android?studio實現(xiàn)簡單的計算器小功能
這篇文章主要為大家詳細(xì)介紹了android?studio實現(xiàn)簡單的計算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

