详解Android四种存储方式
在android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了android开发中的不同存储方式的特点
一,preferences
preferences是一个较轻量级的存储数据的方法,具体使用方法:
在a中保存值:
sharedpreferences.editor sharedata = getsharedpreferences("data", 0).edit(); sharedata.putstring("name","shenrenkui"); sharedata.commit();
在b中取值:
sharedpreferences sharedata = getsharedpreferences("data", 0); string data = sharedata.getstring("name", null); log.i(tag,"data="+data);
注 意,context.getsharedpreferences(string name,int type)的参数更我们在创建数据的时候的数据权限属性是一样的,存储和取值的过程这有点像hashmap但是比hashmap更具人性 化,getxxx(object key,object defualtreturnvalue),第二个参数是当你所要的key对应没有时候返回的值。这就省去了很多逻辑判断。。。。
二,files
在android上面没有的file就是j2se中的纯种file了,可见功能之强大,这里就算是走马观花地严重路过了。
//创建文件 file = new file(file_path , file_name); file.createnewfile(); //打开文件file的outputstream out = new fileoutputstream(file); string infotowrite = "纸上得来终觉浅,绝知此事要躬行"; //将字符串转换成byte数组写入文件 out.write(infotowrite.getbytes()); //关闭文件file的outputstream out.close(); //打开文件file的inputstream in = new fileinputstream(file); //将文件内容全部读入到byte数组 int length = (int)file.length(); byte[] temp = new byte[length]; in.read(temp, 0, length); //将byte数组用utf-8编码并存入display字符串中 display = encodingutils.getstring(temp,text_encoding); //关闭文件file的inputstream in.close(); } catch (ioexception e) { //将出错信息打印到logcat log.e(tag, e.tostring()); this.finish(); } //从资源读取 inputstream is=getresources().getrawresource(r.raw.文件名)
三,databases
android 内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的sql语句基本都可以使用,我们自己创建的数据可以用adb shell来操作。具体路径是/data/data/package_name/databases。如,这里演示一下进入 com.android.providers.media包下面的操作。
1, adb shell 2, cd /data/data/com.android.providers.media/databases 3, ls(查看com.android.providers.media下面的数据库) 4, sqlite3 internal.db 5, .help---看看如何操作 6, .table列出internal数据中的表 7, select * from albums; databasehelper mopenhelper; private static final string database_name = "dbfortest.db"; private static final int database_version = 1; private static final string table_name = "diary"; private static final string title = "title"; private static final string body = "body"; private static class databasehelper extends sqliteopenhelper { databasehelper(context context) { super(context, database_name, null, database_version); } @override public void oncreate(sqlitedatabase db) { string sql = "create table " + table_name + " (" + title + " text not null, " + body + " text not null " + ");"; log.i("haiyang:createdb=", sql); db.execsql(sql); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { } } /** * 重新建立数据表 */ private void createtable() { sqlitedatabase db = mopenhelper.getwritabledatabase(); string sql = "create table " + table_name + " (" + title + " text not null, " + body + " text not null " + ");"; log.i("haiyang:createdb=", sql); try { db.execsql("drop table if exists diary"); db.execsql(sql); settitle("数据表成功重建"); } catch (sqlexception e) { settitle("数据表重建错误"); } } /** * 删除数据表 */ private void droptable() { sqlitedatabase db = mopenhelper.getwritabledatabase(); string sql = "drop table " + table_name; try { db.execsql(sql); settitle("数据表成功删除:" + sql); } catch (sqlexception e) { settitle("数据表删除错误"); } } /** * 插入两条数据 */ private void insertitem() { sqlitedatabase db = mopenhelper.getwritabledatabase(); string sql1 = "insert into " + table_name + " (" + title + ", " + body + ") values('haiyang', 'android的发展真是迅速啊');"; string sql2 = "insert into " + table_name + " (" + title + ", " + body + ") values('icesky', 'android的发展真是迅速啊');"; try { log.i("haiyang:sql1=", sql1); log.i("haiyang:sql2=", sql2); db.execsql(sql1); db.execsql(sql2); settitle("插入两条数据成功"); } catch (sqlexception e) { settitle("插入两条数据失败"); } } /** * 删除其中的一条数据 */ private void deleteitem() { try { sqlitedatabase db = mopenhelper.getwritabledatabase(); db.delete(table_name, " title = 'haiyang'", null); settitle("删除title为haiyang的一条记录"); } catch (sqlexception e) { } } /** * 在屏幕的title区域显示当前数据表当中的数据的条数。 */ private void showitems() { sqlitedatabase db = mopenhelper.getreadabledatabase(); string col[] = { title, body }; cursor cur = db.query(table_name, col, null, null, null, null, null); integer num = cur.getcount(); settitle(integer.tostring(num) + " 条记录"); }
四,network
这是借助internet来存储我们要的数据,这是cs结构的存储方式,也是点一下名了。
如何使用 content provider
下边是用户经常接触到的几个典型content provider应用:
* content provider name : intended data * browser : browser bookmarks, browser history, etc. * calllog : missed calls, call datails, etc. * contacts : contact details * mediastore : media files such as audio, video and images * settings : device settings and preferences
调用content provider资源的标准uri结构:
<standard_prefix>://<authority>/<data_path>/<id>
例如:
1) 取得浏览器所有“书签”信息: content://browser/bookmarks
2) 取得系统通讯录中的信息: content://contacts/people (如果取得某一个特定通讯记录,在路径uri的末端指定一个id号:content://contacts/people/5
简单的实例片段:
uri allcalls = uri.parse("content://call_log/calls"); cursor c = managedquery(allcalls, null, null, null, null);
以上内容是小编给大家介绍的android四种存储方式,希望大家喜欢,更多信息请登录网站了解更多。