Android中SharedPreferences与Editor的使用
我們在開發Android程序的時候,經常會遇到一些需要保存數據,以妨下次再用到這些數據。
如果不是有接觸,我想大家應該比較容易想到的是,數據庫(SQLite數據庫)和文件存儲。其實,在Android開發中,還有三種保存數據的方式,SharedPreferences存儲、ContentProvider存儲和Network存儲。后兩種,本篇博客不做詳細介紹。
SharedPreferences保存的數據主要是類似配置信息格式的數據,因此它保存的數據主要是簡單類型的key-value對。從用法角度來看,SharedPreferences和SharedPreferences.Editor組合起來非常像Map,SharedPreferences負責根據key讀取數據,而SharedPreferences.Editor則用寫入數據。
SharedPreferences的API超連接。。。。。。。。
SharedPreferences.Editor的API超連接。。。。。。
這里還有一個小問題要大家注意。那就是SharedPreferences存儲數據時,只能保存一組數據。它可能有多個key-value對,不過不管它是怎么的多,都只能是一組數據。下面我就給出一個注冊和登錄小Demo中的關鍵代碼來更好的說明一下。
注冊(寫入數據):
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, "前后兩次輸入的密碼不一致,請重新輸入。。。", Toast.LENGTH_SHORT);}}});cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub}});} }
登錄(讀取數據):
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, "用戶名或密碼用誤,請重新登錄。", Toast.LENGTH_LONG).show();}}});} }
在這個例子中,大家可以看到,你在注冊時填寫的用戶名和密碼被保存到SharedPreferences中之后,我就可以用這個注冊的用戶名和密碼來登錄了。不過,要是用這個來實現注冊和登錄,只能是單用戶的,因為上一次注冊的賬號會被下一次注冊給覆蓋掉。也就是說一臺機子,一個程序只能跑一個用戶。這樣太不合理。所以這種存儲數據的方式只能是保存一些配置信息(如是否打開音效,是否使用振動效果,小游戲的玩家積分等等)
這里也給出,我上傳在CSDN上的程序源碼:點擊打開源碼鏈接
總結
以上是生活随笔為你收集整理的Android中SharedPreferences与Editor的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于浮点数的原理详解
- 下一篇: Android文件操作中的openFil