ShareedPreferences使用键值对的方式存储数据,支持多种不同的数据类型存储。除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
一、存储数据:
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
Context类的getSharedPreferences()方法。
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据,putXXX()方法。
四、通过commit()方法提交数据。
例子:
<span style="font-size:18px;">public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取SharedPreferences对象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入数据
Editor editor = sp.edit();
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
//返回STRING_KEY的值
Log.d("SP", sp.getString("STRING_KEY", "none"));
//如果NOT_EXIST不存在,则返回值为"none"
Log.d("SP", sp.getString("NOT_EXIST", "none"));
}
}</span>
高仿拉手网项目中的例子:
新建工具类utils文件,重写这三个静态方法
<span style="font-size:18px;">public class ToolKits {
//写getSharedPreferences()方法,本例中写成个方法更方便使用
public static SharedPreferences getSharedPreferences(Context context) {
return context.getSharedPreferences("com.xuexi.lashou", Context.MODE_PRIVATE);
}
//写方法putBooble()
public static void putBooblean(Context context,String key,boolean value) {
SharedPreferences sharedPreferences= getSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
//读方法getBooble()
public static boolean getBoolean(Context context,String key,boolean defaultValue) {
return getSharedPreferences(context).getBoolean(key, defaultValue);
}
}</span>
WelcomeActivity中OnCreate()方法内实现判断
new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message arg0) {
if(!ToolKits.getBoolean(WelcomeActivity.this, IS_FIRST, false)){
startActivity(new Intent(WelcomeActivity.this, WhatsNewActivity.class));//如果是第一次使用,则跳转到欢迎页
ToolKits.putBooblean(WelcomeActivity.this, IS_FIRST, true);
}else{
startActivity(new Intent(WelcomeActivity.this,MainActivity.class));//不是,则跳转到主界面
}
ToolKits.putBooblean(WelcomeActivity.this, IS_FIRST, true);//调用工具类的方法,保存内容到SharedPreferences
return true;
}
}).sendEmptyMessageDelayed(0, 3000);