Android中的五种数据存储方式


数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是:

1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
 
 
①SharedPreferences
SharedPreferences是Android平台下轻量级的存储类,主要保存一些常用的配置如窗口状态。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/包名/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
 
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
SharedPreferences sp=getSharedPreferences("SP",MODE_PRIVATE);
二、利用edit()方法获取Editor对象。
Editor editor=sp.edit();
三、通过Editor对象存储key-value键值对数据。
editor.putString("STRING_KEY","string");
editor.putInt("INT_KEY",0);
editor.putBoolean("BOOLEAN_KEY",true);
四、通过commit()方法提交数据
editor.commit();
 
SharedPreferences存储对比SQLite储存,免去了创建数据库,创建表,写SQL语句等操作,但是其只能储存boolean,int,float,long,string5种数据类型,无法进行条件查询,所以说到底,它也是一种简单的存储方式补充,而无法完全替代SQLite。
 
②文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/包名/files/***.***。
 
openFileOutput()指定两个参数,第一个参数是指定文件名称,不能包含路径分隔符"/",如果文件不存在,则自动创建。
第二个参数指定操作模式,有四种操作模式,分别是:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
 
Context.MODE_PRIVATE是默认操作,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,
Context.MODE_APPEND是追加模式,首先检查文件存不存在,存在就往文件里追加,不存在就创建。
Context.MODE_WORLD_READABLE代表当前文件可被其他应用读取。
Context.MODE_WORLD_WRITEABLE代表当前文件可被其他应用写入。
 
写入的代码:
FileOutputStream fos=
openFileOutput("test.txt",Context.MODE_APPEND);
fos.write(text.getText().toString());
fos.close();

 

读取的代码:

FileInputStream fis=openFileInput("test.txt");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=fis.read(buffer)!=-1){
           stream.write(buffer,0,length);    
}
stream.close();
fis.close();

 

*往SD卡中存储文件
获取SD卡的状态:​Environment.getExternalStorageState(),如果手机有SD卡且可以读写,则返回Environment.MEDIA_MOUNTED。
获取SD卡的目录:Environment.getExternalStorageDirectory()。
 
通常的代码为:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNT)){
      File sdCardDir=Environment.getExternalStorageDireactory();
      File saveFile=new File(sdCardDir,"a.txt");
      FileOutputStream fos=new FileOutputStream(saveFile); 
      fos.write("test".getBytes());
      fos.close();
}

 

 
③SQLite数据库存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。
Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
 
SQLiteOpenHelper 的子类,至少需要实现三个方法:
1.构造方法
调用父类SQLiteOpenHelper的构造函数。该方法需要四个函数,分别是上下文Context,数据库名,游标工厂(通常为null),还有一个代表版本号的version。
2.onCreate()
在此方法中我们需要创建表和初始化数据。
如:CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL)
3.onUpGrage()
升级数据库时调用的方法。需要三个参数,分别是SQLiteDatabase对象,旧的版本号,新的版本号。
 
*使用SQLite对数据进行操作
们通过SQLiteOpenHelper的getReadableDatabase或getWriteableDatabase获得了可写或可读的数据库后
insert():可以通过insert()进行插入操作,接收三个参数,分别是表名,第二个参数代表未指定添加数据的情况下可为空的列赋值为null,我们在这里一般填null就可,第三个是ContentValues,它提供一系列的put(),供我们往里面填充数据。
SQLiteDatabase db=dbHelper.getWriteableDatabase();
ContentValues values=new ContentValues();
values.put("name","string");
values.put("page",23);
values.put("price",55.85);
db.insert("Book",null,values);

 

update():更新的操作。接收四个参数,分别是表名,ContentValues,指定哪一行,相应的填充指定哪一行的数组。
SQLiteDatabase db=dbHelper.getWriteableDatabase();
ContentValues values=new ContentValues();
values.put("page",33);
db.update("Book",values,"name=?",new String[]{"23"});

 

delete():删除操作。接收三个参数,第一个为表名,第二个为指定哪一行,第三个为相应的填充哪一行的数据。

SQLiteDatabase db=dbHelper.getWriteableDatabase();
db.delete("Book","page>?",new String[]{50});

 

query():查询操作。至少要传入七个参数。分别是表名tablename,列名columns,where的约束条件selection,为where占位符提供数据的selectionArgs,需要group by的列,group by后进一步约束的having,还有对结果进行排序的orderBy,最后返回一个Cursor对象,我们可以从中获取到相应的数据。

SQLiteDatabase db=dbHelper.getReadableDatabase();
//把页数大于20的筛选出来
Cursor cursor=db.query("Book","page>?",new String[]{20},null,null,null,null);
if(cursor!=null){
        String name=cursor.getString(cursor.getColumnIndex("name"));  
        ...
        
}
cursor.close();

 

④CotentProvider存储数据
详见ContentProvider介绍。
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM