Android中SharedPreferences与Editor的使用
我們?cè)陂_發(fā)Android程序的時(shí)候,經(jīng)常會(huì)遇到一些需要保存數(shù)據(jù),以妨下次再用到這些數(shù)據(jù)。
如果不是有接觸,我想大家應(yīng)該比較容易想到的是,數(shù)據(jù)庫(SQLite數(shù)據(jù)庫)和文件存儲(chǔ)。其實(shí),在Android開發(fā)中,還有三種保存數(shù)據(jù)的方式,SharedPreferences存儲(chǔ)、ContentProvider存儲(chǔ)和Network存儲(chǔ)。后兩種,本篇博客不做詳細(xì)介紹。
SharedPreferences保存的數(shù)據(jù)主要是類似配置信息格式的數(shù)據(jù),因此它保存的數(shù)據(jù)主要是簡單類型的key-value對(duì)。從用法角度來看,SharedPreferences和SharedPreferences.Editor組合起來非常像Map,SharedPreferences負(fù)責(zé)根據(jù)key讀取數(shù)據(jù),而SharedPreferences.Editor則用寫入數(shù)據(jù)。
SharedPreferences的API超連接。。。。。。。。
SharedPreferences.Editor的API超連接。。。。。。
這里還有一個(gè)小問題要大家注意。那就是SharedPreferences存儲(chǔ)數(shù)據(jù)時(shí),只能保存一組數(shù)據(jù)。它可能有多個(gè)key-value對(duì),不過不管它是怎么的多,都只能是一組數(shù)據(jù)。下面我就給出一個(gè)注冊(cè)和登錄小Demo中的關(guān)鍵代碼來更好的說明一下。
注冊(cè)(寫入數(shù)據(jù)):
public class RegistrationUI extends Activity {private String TAG = "RegistrationUI";SharedPreferences preferences;SharedPreferences.Editor editer;private EditText userNameEditTxt;private EditText userPwEditTxt1;private EditText userPwEditTxt2;private Button ok;private Button cancel;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.registration);preferences = getSharedPreferences("myinfo", MODE_WORLD_READABLE);editer = preferences.edit();userNameEditTxt = (EditText) findViewById(R.id.reg_userNameEditTxt);userPwEditTxt1 = (EditText) findViewById(R.id.reg_userPwEditTxt1);userPwEditTxt2 = (EditText) findViewById(R.id.reg_userPwEditTxt2);ok = (Button) findViewById(R.id.determineBn);cancel = (Button) findViewById(R.id.cancelBn);ok.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日" + "hh:mm:ss");editer.putString("date_and_time", sdf.format(new Date()));String name = userNameEditTxt.getText().toString();String password1 = userPwEditTxt1.getText().toString();String password2 = userPwEditTxt2.getText().toString();if (password1.equals(password2)){editer.putString("userName", name);editer.putString("userPw", password1);editer.commit();}else{Toast.makeText(RegistrationUI.this, "前后兩次輸入的密碼不一致,請(qǐng)重新輸入。。。", Toast.LENGTH_SHORT);}}});cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub}});} }
登錄(讀取數(shù)據(jù)):
public class LoginUI extends Activity {SharedPreferences preferences;SharedPreferences.Editor editer;private EditText userName;private EditText userPw;private Button loginBn;private Button cancelBn;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.login);preferences = getSharedPreferences("myinfo", MODE_WORLD_READABLE);userName = (EditText) findViewById(R.id.login_userNameEditTxt);userPw = (EditText) findViewById(R.id.login_userPwEditTxt);loginBn = (Button) findViewById(R.id.login_determineBn);cancelBn = (Button) findViewById(R.id.login_cancelBn);loginBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString userName_DB = preferences.getString("userName", null);String userPw_DB = preferences.getString("userPw", null);if (userName_DB.equals(userName.getText().toString()) && userPw_DB.equals(userPw.getText().toString())){Toast.makeText(LoginUI.this, "登錄成功!", Toast.LENGTH_LONG).show();}else{Toast.makeText(LoginUI.this, "用戶名或密碼用誤,請(qǐng)重新登錄。", Toast.LENGTH_LONG).show();}}});} }
在這個(gè)例子中,大家可以看到,你在注冊(cè)時(shí)填寫的用戶名和密碼被保存到SharedPreferences中之后,我就可以用這個(gè)注冊(cè)的用戶名和密碼來登錄了。不過,要是用這個(gè)來實(shí)現(xiàn)注冊(cè)和登錄,只能是單用戶的,因?yàn)樯弦淮巫?cè)的賬號(hào)會(huì)被下一次注冊(cè)給覆蓋掉。也就是說一臺(tái)機(jī)子,一個(gè)程序只能跑一個(gè)用戶。這樣太不合理。所以這種存儲(chǔ)數(shù)據(jù)的方式只能是保存一些配置信息(如是否打開音效,是否使用振動(dòng)效果,小游戲的玩家積分等等)
這里也給出,我上傳在CSDN上的程序源碼:點(diǎn)擊打開源碼鏈接
總結(jié)
以上是生活随笔為你收集整理的Android中SharedPreferences与Editor的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于浮点数的原理详解
- 下一篇: Android文件操作中的openFil