在开发Android应用时,常常需要保存一些用户的设置,比如应用中涉及到图片或视频的存储地址,应用的语言,或者应用中某些功能的开关,等等。
这类存储在Android中非常适合用Shared Preferences,它类似我们常用的ini文件。
查API很容易知道如何存储、读取数据,这里不做介绍。只给出一个我的封装,便于在程序中使用。如下:
?
package cn.edu.xjtu.chao;import java.util.HashMap;import java.util.Locale;import android.content.Context;import android.content.SharedPreferences;public class Setting { //程序所使用的文件 private static final String SETTINGS_FILE = "myappSetting"; private static HashMap<String,Object> DEFAULT_SETTING = null; private SharedPreferences mSettings = null; private SharedPreferences.Editor mEditor = null; //静态初始化块,设置默认值 static{ DEFAULT_SETTING = new HashMap<String, Object>(); DEFAULT_SETTING.put("image_root", "/sdcard/myapp/image/"); DEFAULT_SETTING.put("video_root", "/sdcard/myapp/video/"); //下面是根据系统地区设置应用默认语言 if(Locale.getDefault().getCountry().equals("CN")){ DEFAULT_SETTING.put("lang", "chs"); } else if(Locale.getDefault().getCountry().equals("TW")){ DEFAULT_SETTING.put("lang", "cht"); } else{ DEFAULT_SETTING.put("lang", "en"); } //还可以添加其他默认设置 } //构造方法 public Setting(Context context){ //用来获取数据 mSettings = context.getSharedPreferences(SETTINGS_FILE, 0); //用来编辑数据 mEditor = mSettings.edit(); } public String getString(String key){ if(DEFAULT_SETTING.get(key) != null) return mSettings.getString(key, (String) DEFAULT_SETTING.get(key)); else return mSettings.getString(key, null); } public int getInt(String key){ if(DEFAULT_SETTING.get(key) != null) return mSettings.getInt(key, (Integer) DEFAULT_SETTING.get(key)); else return mSettings.getInt(key, 0); } public boolean getBoolean(String key){ if(DEFAULT_SETTING.get(key) != null) return mSettings.getBoolean(key, (Boolean) DEFAULT_SETTING.get(key)); else return mSettings.getBoolean(key, false); } public float getFloat(String key){ if(DEFAULT_SETTING.get(key) != null) return mSettings.getFloat(key, (Float) DEFAULT_SETTING.get(key)); else return mSettings.getFloat(key, 0f); } public long getLong(String key){ if(DEFAULT_SETTING.get(key) != null) return mSettings.getLong(key, (Long) DEFAULT_SETTING.get(key)); else return mSettings.getLong(key, 0); } public Setting putString(String key, String value){ mEditor.putString(key, value); return this; } public Setting putInt(String key, int defaultValue){ mEditor.putInt(key, defaultValue); return this; } public Setting putBoolean(String key, boolean defaultValue){ mEditor.putBoolean(key, defaultValue); return this; } public Setting putFloat(String key, float defaultValue){ mEditor.putFloat(key, defaultValue); return this; } public Setting putLong(String key, long defaultValue){ mEditor.putLong(key, defaultValue); return this; } //编辑之后要调用此函数来提交 public boolean commit(){ return mEditor.commit(); }}
在Activity中这样使用:
?
//定义Setting对象Setting mSetting = new Setting(this);//获取应用现在使用的语言String lang = mSetting.getString("lang");//设置应用的语言mSetting.putString("lang","chs");//在所有修改完之后调用commitmSetting.commit();
OK,就这样,比较简单,就不做demo了。
注:此博客参加“Google 暑期大学生博客分享大赛 - 2011 Android 成长篇”