很多时候我们开发的软件需要保存一些用户设置的信息,例如是否记住密码、显示的字体大小等等。如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。
在Android国度里,我们使用SharedPreferences是最合适不过的了,SharedPreferences是一个轻量级的存储类,特别适合用于保存软件配置参数。SharedPreferences其背后是用xml文件存放数据,文件存放在/data/data/package name/shared_prefs目录下。
下面我写了一个SharedPreferences_Demo,需要的同志可以Download下来看看。欢迎交流学习。
首先,我写了一个工具类,用来进行SharedPreferences的相关操作:
- package com.iteye.dengwho;
- import android.content.Context;
- import android.content.SharedPreferences;
- import android.content.SharedPreferences.Editor;
- public class SharedPreferencesUtil {
- private SharedPreferences sp;
- private Editor editor;
- private final static String SP_NAME = "mydata";
- private final static int MODE = Context.MODE_WORLD_READABLE
- + Context.MODE_WORLD_WRITEABLE;
- public SharedPreferencesUtil(Context context) {
- sp = context.getSharedPreferences(SP_NAME, MODE);
- editor = sp.edit();
- }
- public boolean save(String key, String value) {
- editor.putString(key, value);
- // 亿万不要忘了加commit呐~~~!!!!
- return editor.commit();
- }
- public String read(String key) {
- String str = null;
- str = sp.getString(key, null);
- return str;
- }
- }
- package com.iteye.dengwho;
- import android.content.Context;
- import android.content.SharedPreferences;
- import android.content.SharedPreferences.Editor;
- public class SharedPreferencesUtil {
- private SharedPreferences sp;
- private Editor editor;
- private final static String SP_NAME = "mydata";
- private final static int MODE = Context.MODE_WORLD_READABLE
- + Context.MODE_WORLD_WRITEABLE;
- public SharedPreferencesUtil(Context context) {
- sp = context.getSharedPreferences(SP_NAME, MODE);
- editor = sp.edit();
- }
- public boolean save(String key, String value) {
- editor.putString(key, value);
- // 亿万不要忘了加commit呐~~~!!!!
- return editor.commit();
- }
- public String read(String key) {
- String str = null;
- str = sp.getString(key, null);
- return str;
- }
- }
这里我用我的血泪屎来提醒大家在save的操作时1000万不要忘了commit()。
另外,因为SharedPreferences本身就是以XML保存文件的,所以我们不用给它命名时多加“.xml”后缀。
下面是Activity类:
- package com.iteye.dengwho;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- public class SharedPreferenced_DemoActivity extends Activity {
- private Button saveBtn;
- private Button readBtn;
- private EditText inputEv;
- private EditText showEv;
- private SharedPreferencesUtil util;
- /**
- * 给控件初始化
- */
- public void init() {
- util = new SharedPreferencesUtil(this);
- saveBtn = (Button) findViewById(R.id.save_btn);
- readBtn = (Button) findViewById(R.id.read_btn);
- inputEv = (EditText) findViewById(R.id.input_et);
- showEv = (EditText) findViewById(R.id.showinfo_et);
- // 设置监听
- setListener();
- }
- /**
- * 给Button加监听事件
- */
- public void setListener() {
- saveBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- boolean b = util.save("mykey", inputEv.getText().toString());
- String msg;
- if (b) {
- msg = "保存成功";
- } else {
- msg = "保存失败";
- }
- Toast.makeText(SharedPreferenced_DemoActivity.this, msg,
- Toast.LENGTH_SHORT).show();
- }
- });
- readBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- System.out.println("read...");
- String value = util.read("mykey");
- showEv.setText(value);
- }
- });
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- }
- package com.iteye.dengwho;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- public class SharedPreferenced_DemoActivity extends Activity {
- private Button saveBtn;
- private Button readBtn;
- private EditText inputEv;
- private EditText showEv;
- private SharedPreferencesUtil util;
- /**
- * 给控件初始化
- */
- public void init() {
- util = new SharedPreferencesUtil(this);
- saveBtn = (Button) findViewById(R.id.save_btn);
- readBtn = (Button) findViewById(R.id.read_btn);
- inputEv = (EditText) findViewById(R.id.input_et);
- showEv = (EditText) findViewById(R.id.showinfo_et);
- // 设置监听
- setListener();
- }
- /**
- * 给Button加监听事件
- */
- public void setListener() {
- saveBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- boolean b = util.save("mykey", inputEv.getText().toString());
- String msg;
- if (b) {
- msg = "保存成功";
- } else {
- msg = "保存失败";
- }
- Toast.makeText(SharedPreferenced_DemoActivity.this, msg,
- Toast.LENGTH_SHORT).show();
- }
- });
- readBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- System.out.println("read...");
- String value = util.read("mykey");
- showEv.setText(value);
- }
- });
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- }
运行界面:
保存成功后我们可以找到相应的XML文件:
我们把XML文件提取出来打开,就可以看到我们保存的Key和Value了,小 平同志告诉我们:两手都要抓!