SharedPreferences是Android中一种存储方式,主要用来存储记录简单的小数据,比如开关状态,按钮状态等一些设置信息,简单的用户信息等等,在App中也比较常用,这里写了一个工具类方便以后项目的使用.
新建一个工程SharedPreferences:
在activity_main.xml文件中添加两个按钮,一个存储数据,一个取出数据:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="133dp"
android:text="存储数据" />
<Button
android:id="@+id/btn_get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn_save"
android:layout_alignBottom="@+id/btn_save"
android:layout_marginLeft="40dp"
android:layout_toRightOf="@+id/btn_save"
android:text="取出数据" />
</RelativeLayout>
新建一个SharedPreferencesUtil.java:
代码比较简单,一个存储数据的方法,一个取数据的方法,可以存取String,Boolean,Integer,Float,Long的类型的数据
/**
*
* @author Grrsun SharedPreferences工具类 用来方便保存和读取数据
*
*/
public class SharedPreferencesUtil {
// 保存的数据的文件名
private static final String FILE_NAME = "share_data";
/**
* 保存数据
*/
public static void savaData(Context context, String key, Object value) {
// 获取数据类型
String type = value.getClass().getSimpleName();
// 参数1 文件保存路径 参数2 文件类型
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (type.equals("String")) {
editor.putString(key, (String) value);
}
if (type.equals("Integer")) {
editor.putInt(key, (Integer) value);
}
if (type.equals("Boolean")) {
editor.putBoolean(key, (Boolean) value);
}
if (type.equals("Float")) {
editor.putFloat(key, (Float) value);
}
if (type.equals("Long")) {
editor.putLong(key, (Long) value);
}
editor.commit();
}
/**
* 读取数据
*/
public static Object getData(Context context, String key, Object defaultValue) {
String type = defaultValue.getClass().getSimpleName();
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
if (type.equals("String")) {
return sp.getString(key, (String) defaultValue);
}
if (type.equals("Integer")) {
return sp.getInt(key, (Integer) defaultValue);
}
if (type.equals("Boolean")) {
return sp.getBoolean(key, (Boolean) defaultValue);
}
if (type.equals("Float")) {
return sp.getFloat(key, (Float) defaultValue);
}
if (type.equals("Long")) {
return sp.getLong(key, (Long) defaultValue);
}
return null;
}
}
在MainActivity.java中通过两个按钮存取数据:
代码中用了第三方注解工具ButterKnife,在我的另一篇博文 Android依赖注入类库 Butter Knife的使用 中有ButterKnife的使用配置方法
public class MainActivity extends Activity {
private SharedPreferencesUtil sputil;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
sputil = new SharedPreferencesUtil();
}
@OnClick({ R.id.btn_save, R.id.btn_get })
public void operate(View v) {
switch (v.getId()) {
case R.id.btn_save:
save();
break;
case R.id.btn_get:
get();
break;
default:
break;
}
}
/**
* SharedPreferences保存数据
*/
@SuppressWarnings("static-access")
private void save() {
sputil.savaData(this, "name", "良辰");
sputil.savaData(this, "age", 23);
sputil.savaData(this, "isMarry", false);
sputil.savaData(this, "height", 173.2f);
sputil.savaData(this, "weight", 62L);
}
/**
* SharedPreferences获取数据
*/
@SuppressWarnings("static-access")
private void get() {
String name = (String) sputil.getData(this, "name", "");
int age = (Integer) sputil.getData(this, "age", 0);
boolean isMarry = (Boolean) sputil.getData(this, "isMarry", true);
float height = (Float) sputil.getData(this, "height", 0.0f);
long weight = (Long) sputil.getData(this, "weight", 0L);
System.out.println("--" + name + ":" + age + ":" + isMarry + ":" + height + ":" + weight);
}
}
别忘了在AndroidManifest.xml中加入读取数据的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
完工后,运行程序:
点击存储数据,然后我们打开Eclipse的DDMS,点击根目录的data->data:
在第二个data文件夹下找到你的程序包名文件夹,继续点开,找到生成的share_data.xml文件,点击DDMS菜单栏右上角的导出按钮导出到计算机你指定的位置:
打开导出的xml文件,我们可以看到已经存储到本地的数据:
这说明我们的存储数据的方法是没问题的,接下来我们验证获取数据的方法,点击取出数据按钮,我们查看一下Eclipse打印的的log信息,可以看到打印出了以下数据:
这说明我们的取数据的方法也是没问题的.
这样既当复习了知识,同时以后在其他项目中也可以直接拿来用了.