在Android中,数据存储一个用五种方式,分别是:文件存储 、SharedPreferences、SQLite数据库存储、ContentProvider、网络存储。
SharedPreferences
SharedPreferences是Android系统中最容易使用的存储技术,是一种轻量型的Android数据存储方案,主要用于保存应用程序一些配置信息,如登录用户信息、播放音乐退出时的状态、设置选项值等。
SharedPreferences的使用方法
1获取SaredPeferences对象
获取SharedPrreferences 对象有两种方式,既可以使用PreferenceManager.getDefaultSharePreferences()方法获取,又可使用Activity的getSharedPreferences(Stringname,int mode)方法获取,它的第一个参数是文件名称,第二个参数是访问模式。 gitiaisardeleres和gthtreterere )的区别在于:
(1)自定义的些设置通过文件名用geharedrefrenere0方法获取:
(2)应用默认的偏好文件peferces.xce通过gtDeaulsharedreferences)方法获取。
SharedPreferences 支持以下访问模式。
(1) MODE PRIVATE: 私有,默认值,代表该文件是私有数据,只能被应用程序本身访问,在该模式下,写入的内容会覆盖原文件的内容。
(2) MODE APPEND:该模式会检查文件是否存在,存在就向文件中追加内容,否则创建新文件。
(3) MODE WORLD READABLE:全局读,创建程序有读取或写入的权限,其他程序也有读取的权限,但不能写入。
(4) MODE WORLD WRITEABLE:全局写,创建程序和其他程序仅有写入的权限。
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); SharedPreferences perf= getSharedPreferences("myPref", Activity.MODE_PRIVATE);
使用SharedPreferences.edit()方法获取SharedPreferences.Editor内部接口,该接口提供了保存数据的方法,如putString(String key , String value)等。
Editor editor = pref.edit();
2.保存SharedPreferences数据
通过Editor对象的putXxx方法保存key-value,其中,Xxx标识了value的不同数据类型,例如,boolean类型的value需要用putBoolean方法,String类型的value要用putString方法,并通过Editor.commit方法才能真正保存到相应的文件中。
editor.putString("name","王艳");
editor。putInt("age",18);
editor.putBoolean("default",true);
editor.commit();
导出myPref.xml的文件内容如下。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name = "name">王艳</string>
<boolean name = "default" value="true"/>
<int name="age" value="18"/>
</map>
3.读取SharedPreferences数据
String name=pref.getString("name",""); int age= pref.getInt("age",0);
使用SharedPreferences对象的getXxx方法可以从myPref.xml中获取数据,代码如下。
4.清除SharedPreferences数据
使用SharedPreferences对象的remove(key_name)方法删除特定值,如果需要删除所有的值,则应调用clear()。
editor.remove("name"); editor.remove("time"); editor.commit();
从SharedPreferences中删除所有数据的代码如下:
editor.clear();editor.commit();
在使用SharedPreferences的过程中需要注意以下几点。
(1).通过edit()获取一个新的编辑器对象进行写入,设置完成后必须调用commit()方法才能写入磁盘文件,否则重启应用后,数据就会丢失。
(2).必须使用局部变量保存获取到的edit()编辑器对象,而不能每项都通过edit()方法进行操作,因为每次调用edit方法都会生成新的对象实例,操作的将不是同一个对象。
(3).读取已存储的数据是通过SharedPreferences对象本身获取的, 而不再是editor对象。获取数据时必须指定默认值。
SQLite数据库存储
数据类型:integer 整型、real 浮点型、text 文本类型、blob 二进制类型
public class MyDatabaseHelper extends SQLiteOpenHelper{
public static final String CREATE_BOOK = "create table book ( "
+ " id integer primary key autoincrement,"
+ " author text,"
+ "price real,"
+ "pages integer,"
+ "name text)";
private Context context;public MyDatabaseHelper (Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
} //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
在MainActivity中
MyDatabaseHelper helper = new MyDatabaseHelper(this,"BookStore.db",null,1); //检测到没有BookStore这个数据库,会创建该数据库并调用MyDatabaseHelper中的onCreated方法。 helper.getWritableDatabase();
向数据库添加数据
insert()方法,参数一表名,参数二是在未指定添加数据的情况下给某些可为空的列自动赋值为NULL,设置为null即可,参数三是ContentValues对象。
MainActivity
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","The Book Name");
values.put("author","chen");
values.put("pages",100);
values.put("price",200);
db.insert("Book",null,values);
更新数据库中的数据
update()方法,参数一是表名,参数二是ContentValues对象,参数三、四是去约束更新某一行或某几行的数据,不指定默认更新所有。
MainActivity
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",120);
db.update("Book",values,"name= ?",new String[]{"The Book Name"});
从数据库中删除数据
delete()方法,参数一是表名,参数二、三是去约束删除某一行或某几行的数据,不指定默认删除所有。
MainActivity
SQLiteDatabase db = helper.getWritableDatabase();
db.delete("Book","pages> ?",new String[]{"100"});
查询数据库中的数据
query()方法,参数一是表名,参数二是指定查询哪几列,默认全部,参数三、四是去约束查询某一行或某几行的数据,不指定默认查询所有,参数五是用于指定需要去group by的列,参数六是对group by的数据进一步的过滤,参数七是查询结果的排序方式
MainActivity
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name");
String author = cursor.getString(cursor.getColumnIndex("author");
int pages = cursor.getString(cursor.getColumnIndex("pages");
double price = cursor.getString(cursor.getColumnIndex("price");
}while(cursor.moveToNext());
}
cursor.close():