Android入門之使用SharedPreference存取信息詳解
簡介
上一篇我們介紹了在android里如何讀寫本地文件。我們有一種場景,類似網(wǎng)頁的cookie,要把用戶的一些儲如上一次登錄、使用的痕跡等信息保存下來以便于每次不需要做重復“填表單”的操作,當在這種場景下我們?nèi)绻彩褂帽镜匚募x寫的話顯然是“太重”了。因此android提供了一種輕量級存儲叫SharedPreference專門用來存儲這種場景下的數(shù)據(jù)。
SharedPreference原理
比如下面這樣的一個登錄界面,我們把用戶登錄成功后的信息保存在SharedPreference中,這樣用戶下次打開手機那么相應的登錄過的信息就可以直接自動填充就可以了。這種場景我們就是使用的SharedPreference來做存儲的。
SharedPreference的存儲
SharedPreference一旦生成后,我們使用Android Studio里的device file explorer
我們可以在data\data\應用實例全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(); } }
核心代碼導讀:
1.當我們點擊了登錄按鈕后,我們把當前用戶的登錄信息通過SharedPreferenceHelper保存進demo_sp.xml這個SharedPreference文件中去;
2.當我們每次切換到activity_main主界面時,在onStart中觸發(fā)讀取上次保存進SharedPreference中的內(nèi)容并以Toast顯示;
很簡單吧,自己動一下手試試吧。
以上就是Android入門之使用SharedPreference存取信息詳解的詳細內(nèi)容,更多關(guān)于Android SharedPreference存取信息的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Flutter開發(fā)之動態(tài)權(quán)限的使用
眾所周知,Android在6.0版本后將權(quán)限修改成了動態(tài)權(quán)限,而iOS則一直使用的是動態(tài)權(quán)限,所以在Flutter應用開發(fā)中如果涉及到一些危險權(quán)限,就需要進行動態(tài)申請,本文就詳細的介紹一下,感興趣的可以了解一下2021-09-09Android?Hilt?Retrofit?Paging3使用實例
這篇文章主要介紹了Android?Hilt依賴注入的使用,首先,某個類的成員變量稱為依賴,如若此變量想要實例化引用其類的方法,可以通過構(gòu)造函數(shù)傳參或者通過某個方法獲取對象,此等通過外部方法獲取對象實例的稱為依賴注入2023-01-01Android webview 遇到android.os.FileUriExposedException錯誤解決辦法
這篇文章主要介紹了Android webview 遇到android.os.FileUriExposedException錯誤解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家遇到這樣的問題解決,需要的朋友可以參考下2017-10-10Android調(diào)試神器stetho使用詳解和改造
今天小編就為大家分享一篇關(guān)于Android調(diào)試神器stetho使用詳解和改造,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02Android自定義控件ImageView實現(xiàn)點擊之后出現(xiàn)陰影效果
這篇文章主要為大家詳細介紹了Android自定義控件ImageView實現(xiàn)點擊之后有陰影效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12