您的位置:首页 > 移动开发 > Android开发

Android数据的四种存储方式一 —— SharedPreference

2016-02-15 12:10 337 查看
SharedPreference

SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的“key-value”键值对数据。通常用来存储程序的一些配置信息。其存储在“data/data/程序包名/shared_prefs目录下。

SharedPreference本身只能获取数据,不支持存储和修改。存储和修改要通过Editor对象来实现。

修改和存储数据

根据Context的getSharedPrerences(key, [模式])方法获取SharedPreference对象;
利用SharedPreference的editor()方法获取Editor对象;
通过Editor的putXXX()方法,将键值对存储数据;
通过Editor的commit()方法将数据提交到SharedPreference内。

//设置单例里面的数值,然后再将数值写入到SharedPreference里

private String setCityName(String _cityName){
City.getCity().setCityName(_cityName);

Context ctx =MainActivity.this;
SharedPreferences sp =ctx.getSharedPreferences("CITY", MODE_PRIVATE);
Editor editor=sp.edit();
editor.putString("CityName", City.getCity().getCityName());
editor.commit();

return City.getCity().getCityName();
}


获取数据

同样根据Context对象获取SharedPreference对象;
直接使用SharedPreference的getXXX(key)方法获取数据。

//从单例里面找,如果不存在则在SharedPreferences里面读取

private String getCityName(){
String cityName = City.getCity().getCityName();
if(cityName==null ||cityName==""){
Context ctx =MainActivity.this;
SharedPreferences sp =ctx.getSharedPreferences("CITY", MODE_PRIVATE);
City.getCity().setCityName(sp.getString("CityName", "广州"));
}
return City.getCity().getCityName();
}


注意

getSharedPrerences(key, [模式])方法中,第一个参数其实对应到XML的文件名,相同key的数据会保存到同一个文件下。
使用SharedPreference的getXXX(key)方法获取数据的时候,如果key不存在的活,不会出现报错,会返回none。建议使用getXXX()的时候指定默认值。
apply,commit这两个方法的区别在于:

1. apply没有返回值而commit返回boolean表明修改是否提交成功

2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。

3. apply方法不会提示任何失败的提示。

MySharedPrerences.java

package com.anxpp.phyg.utils;
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by anxpp on 2015/10/29.
*
*/
public class MySharedPrerences {
/**
* 存储或修改值
* @param context   上下文
* @param flag      存储标志
* @param valueName 存储字段名
* @param value     要保存的值
*/
public static void save(Context context,String flag,String valueName,String value){
SharedPreferences sp =context.getSharedPreferences(flag, Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();
editor.putString(valueName, value);
editor.apply();
}
/**
* 获取值
* @param context   上下文
* @param flag      存储标志
* @param valueName 要获取的字段名
* @return          要获取的值
//@param default   默认值
*/
public static String getString(Context context,String flag,String valueName){
SharedPreferences sp =context.getSharedPreferences(flag, Context.MODE_PRIVATE);
return sp.getString(valueName, "");
}
public static String getString(Context context,String flag,String valueName,String defaultStr){
SharedPreferences sp =context.getSharedPreferences(flag, Context.MODE_PRIVATE);
return sp.getString(valueName, defaultStr);
}
public static int getInt(Context context,String flag,String valueName){
SharedPreferences sp =context.getSharedPreferences(flag, Context.MODE_PRIVATE);
return sp.getInt(valueName, 0);
}
public static int getInt(Context context,String flag,String valueName,int defaultInt){
SharedPreferences sp =context.getSharedPreferences(flag, Context.MODE_PRIVATE);
return sp.getInt(valueName, defaultInt);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: