SharedPreferences记住用户密码 态判断应用是否首次启动等
一、Android SharedPreferences的簡介
SharedPreferences是一種輕型的Android數(shù)據(jù)存儲方式,它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。其存儲位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實現(xiàn)。比較經(jīng)典的使用方式例如用戶輸入框?qū)^往登錄賬戶的存儲。實現(xiàn)SharedPreferences存儲的步驟如下:
1、根據(jù)Context獲取SharedPreferences對象
2、利用edit()方法獲取Editor對象。
3、通過Editor對象存儲key-value鍵值對數(shù)據(jù)。
4、通過commit()方法提交數(shù)據(jù)。
二、SharedPreferences和Editor 的關(guān)系
1、SharedPreferences
public abstract SharedPreferences getSharedPreferences (String name, int mode)
方法得到一個sharedpreferences對象,參數(shù)name是preference文件的名字,mode則是方式,默認(rèn)為0。
2、Editor
Editor可用于SharedPreferences數(shù)據(jù)的添加,刪除,修改和查詢。
Public abstract SharedPreferences.Editor putString (String key,String value)
通過執(zhí)行commit()或是apply()方法,將會應(yīng)用更改。
實例一記住密碼功能的實現(xiàn):
import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.widget.CheckBox;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 讀取sharedprefs中的值,并設(shè)置給對應(yīng)的控件readShared();}private void readShared() {// 1.獲取sharedprefs對象實例SharedPreferences shared = getSharedPreferences("sharedprefs",MODE_PRIVATE);// 2.利用sharedprefs實例按key-value形式讀取對應(yīng)值boolean value=shared.getBoolean("remind", false);// 3.把讀取出來的值設(shè)置給對應(yīng)控件或?qū)ο?/span>CheckBox cb=(CheckBox) findViewById(R.id.cb);cb.setChecked(value);}// 點擊記住密碼public void remind(View view) {// 向sharedpresf寫入當(dāng)前CheckBox的狀態(tài)// 1.獲取sharedprefs對象實例SharedPreferences shared = getSharedPreferences("sharedprefs",MODE_PRIVATE);// 2.利用sharedperfs實例獲取Editor對象Editor editor = shared.edit();// 3.利用Editor寫入對應(yīng)的值:key-valueeditor.putBoolean("remind", ((CheckBox) view).isChecked());// 4.提交:commiteditor.commit();} }實例二:判斷應(yīng)用是否第一次啟動
import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.widget.TextView;/*** 每次進入該Activity時,判斷sharedprefs中是否有寫入過值* * 如果已經(jīng)寫過了,說明已經(jīng)啟動過* * 如果沒有寫,則說明沒啟動過,再寫入一個值* */ public class MainActivity extends Activity {TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);// 先讀再寫readShared();}private void readShared() {// 1.獲取sharedprefs對象SharedPreferences shared = getSharedPreferences("firstRun",MODE_PRIVATE);// 2.讀取對應(yīng)值,如果沒讀取到該值,表明是第一次啟動boolean isFirst = shared.getBoolean("isFirst", true);// 設(shè)置一段文本給TextViewif (isFirst) {tv.setText("這是第一次啟動");// 向sharedprefs寫入值,表明已經(jīng)啟動過了// 獲取Editor對象Editor editor = shared.edit();// 寫值editor.putBoolean("isFirst", false);// commiteditor.commit();} else {tv.setText("已經(jīng)啟動過了");}}使用SharedPreferences的注意點 :
如果使用SharedPreferences用于數(shù)據(jù)存取,大部分人喜歡使用如下代碼:
public void writeSharedprefs(int pos) {SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);SharedPreferences.Editor editor = preferences.edit();editor.putInt("pos", pos);editor.commit();}public int writeSharedprefs() {SharedPreferences preferences = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);int pos = preferences.getInt("pos", 0);return pos; }但很多人忽略了一點,就是跨進程使用的時候,你就會發(fā)現(xiàn)從SharedPreferences讀出來的數(shù)據(jù)永遠(yuǎn)都是第一次寫入的數(shù)據(jù)。 舉例,例如播放器是一個獨立進程,另外某個Activity是另一個獨立進程,播放器與這個Activity利用SharedPreferences通信的時候,如果使用MODE_PRIVATE操作模式,就會出錯。
所以,如果跨進程使用SharedPreferences的使用,需要使用MODE_MULTI_PROCESS模式,代碼如下:
public void writeSharedprefs(int pos) {
總結(jié)
以上是生活随笔為你收集整理的SharedPreferences记住用户密码 态判断应用是否首次启动等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异步任务下载apk文件并弹出对话框提示当
- 下一篇: 简单图库软件的实现(联网下载图片保存到s