说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android开发中保存数据的四种方法

HTML文档下载 WORD文档下载 PDF文档下载
本文详细介绍了Android开发中四种数据存储方式:Preferences,Files,Databases,Network,并给出相应代码。

在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结构:

:////

例如:
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);

转载自:http://blog.csdn.net/sdhjob/archive/2009/12/18/5031610.aspx 

Uplinq2014:亲身体验Vuforia与智能眼镜设备 MDCC 2014 移动开发者大会议程全面揭晓! 顺丰模式:物流行业“互联网化”的科技之路 移动应用云服务工具APICloud宣布完美适配iPhone6 从应用分发到能力开放 华为开发者联盟沙龙上的共赢理念 SOOMLA框架:移动游戏分分钟创建个虚拟商店 Facebook:如何让应用适合所有系统、带宽以及屏幕 Docker实践者不能错过2014 Container技术大会的九大理由!(讲师议题全面揭晓) 2014全球云计算大会中国站(CC China)精彩集锦 腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 【先锋】亲加通讯云:以云服务模式为App提供社交引擎 2014中国移动开发者大调查第一批获奖名单大曝光 移动开发云服务AVOS Cloud宣布完成A轮融资 Uplinq2014:人工智能嵌入硬件 万物互联建生态 Uplinq2014:基于Vuforia的新奇智能玩具 一应俱全!开源跨平台3D应用开发框架Minko 【线下技术培训】敏捷测试实战解析和系统方案 《近匠》Ping++:简单、高效、第三方支付SDK 有关编程的12个猜想 【问底】王帅:深入PHP内核(二)——SAPI探究 【CTO俱乐部走进汽车之家】活动图文实录 只为逼格?超薄便携式无线充电设备Deuce 戴尔未来重心:云计算、大数据、移动互联与安全 【讲师】搜狐于顺治:Container在搜狐PaaS平台中的应用实践 【先锋】从代码层诊断,云端OneAPM平台让开发者专注开发 阿里将推无线领域重磅计划 阿里百川无线开放大会揭晓 提升网站转化率的四步优化方案 只要用连续打印发票时,第一张正确,第二张就不正常,我调了不是走多了就是走少了第三张一样的。 请问,ConnectionString 属性尚未初始化? 爱上一朵有主之花,郁闷ing,请各位出出注意。 为何我没法将贴子发出去?! 爱上一朵有主之花,郁闷ing,请各位出出注意。 请问全局对象为什么先赋值为NULL? 急急急急!!急死我了!大哥们帮帮忙,打印不正确走纸问题! 硬汉对照:一位计算机大师,LISP语言的创造者之人生感悟。看者玩呗。[zt] 爱上一朵有主之花,郁闷ing,请各位出出注意。 请看这段JDBC代码 ./ 是什么意思? 如何把WEB Method指定为用GET方法传递常数? 像MSN那种有邮件时就提示的那个小窗口要怎么做? 用什么API函数可以实现big5转换为gb 关于文件上传问题,大家都使用htmlcontrols.htminputfile控件吗? 各位大虾,关于扫描仪的错误2800:0000是指什么错误?急!!! 请问如何在载入页面前,跳出一个询问用户名和密码的窗口,然后验证用户身份? MSsqlserver 意外终止服务 www服务器过一段时间就停止服务? resin 中jsp文件无法显示图片,怎么回事? 请教思归!!asp.net中弹出对话框的问题 debug命令f怎么用呀? 笔记本电池,能外挂吗?~~~~ 工具欄的顯示應算較專業的問題 寻求共同创业的伙伴! COM+组件远程调用问题 如何才能把计算稿保存下来? 急。chr 与ord的运用! 为什么当我在dreamweaver里把表格的单元格宽度设定为像素了,可当我的字符串超过它的宽度,它不换行?而是拉长我的单元格 使用delphi第三方控件出现的问题 用什么函数把int转成nvarchar 关于上网的问题 关于图片的循环移动问题 寻求共同创业的伙伴! 关于Keil C51的编译问题 谁有《 Inside The C++ Object Model》英文版电子版 请教《深入浅出MFC》中有关“动态创建”的一个问题。 图像缩放和居中显示的问题 请教如何用DDraw实现屏幕随鼠标移动而滚动,就象星际中的地图比屏幕大,但可以滚动显示。 一点问题,劳驾各位高手啦。。谢谢!!! 一个双向链表得问提求救啊 截获、修改本地程序通过socket发出的包的问题 请教DDraw资源网? 可不可以把这两个合并成一句查询语句呀 问一下IDirect3DDevice8::SetTransform第一个参数的问题 如何把一个窗体放进动态链接库中? 集合Set 和 数组Array 的问题 论坛出现乱码怎么办?急!急!急!!! 如何使用JList添加记录项???? 谁遇到过VB printer对象在少数机器上乱码的问题,有的机器又是好的。 不能使用make menuconfig?请指教 春天的一个夜晚,一为久别家园的人,望者皎洁的月光不禁想起了家乡于是吟起诗来( )快 24除与九等于多少原题:一个长方形,周长是24分米,长诗9分米面宽是长的几分之几 人生活的基本条件是什么? 工地上的沙子比水泥多65吨,用了一周后余下的数量相同.水泥还剩下4/5,用去沙子80吨,剩下多少吨水泥?答对此题者奖励500积分! 这个重力是怎么分解啊 帮下忙啊 为什么说明辨是非是做人的基本条件? 强氧化剂像浓硫酸可以把碳粉氧化为二氧化碳,那么一定生成像co2这样的氧化物吗? 传说中的太阳系第10大行星,尼碧汝在2012会撞地球吗?详细些.谢谢 我国古代最早记录超新星爆炸的是什么朝代 乙稀能否被浓硫酸氧化成二氧化碳 2012年13颗行星会排成一条线, 陆生生物生活需要哪些基本条件 人怎样活着才有意义呀?2012就要到啦,我们人类还能坚持多久?什么时候上火星为什么国家一直不通知呢?请尽快回答我 《相对论》到底讲的是什么? 谁能通俗地解释一下相对论通俗! 关于普通话的作文 请告诉我相对论究竟是讲什么的? 有关《史记》的故事.还有帮忙把“破釜沉舟”这个典故讲一下,最多50个字. 有什么新鲜的方法探究物质溶解在水中是吸热还是放热 我与普通话的作文 相对论主要讲了些什么? 物质在水中电离的时候是放热还是吸热? 普通话的作文!马上要! 椒盐虾有多少种做法? 阀门中有个单位VA是什么意思啊 谁有“我与普通话的作文”? 《相对论》讲的是什么说简单点,我是初二的 电器上va代表什么单位?那么1200va的最高可以带动多少瓦? 金鱼的英语拼读怎么拼? 椒盐虾怎样做啊?具体说明一下, 现在环保的购物袋成本多少?请问大家现在哪种购物袋最环保的? 现在工地有水泥7吨 沙子10吨 石子20吨 如果把石子全部用完 水泥够不够 如果不够缺多少 如果足够 剩余多少 “重力作用在物体各个部分从效果上看和作用在重心上是一样的”是什麽意思?就是说效果是什麽意思?是什麽效果? 哪儿有做塑料购物袋的厂家呀不要全新料,就是市场上买菜用的那种 一滴水从天上掉下来什么情况下能把人砸死 相对论主要讲了什么? 春天的一个夜晚,一位久别家乡的人,望着皎洁的月光,不禁想起家乡,于是吟起来诗不是静夜诗春风又绿将难耐 听报告 用英语怎么说?要用report的。 尼比鲁手机怎么样 春天的一个夜晚,一位久别家乡的人,望着皎洁的月光不仅想起了月光,于是吟起诗来〔…………〕— 做一个有关宠物的报告用英语怎么说 从效果上看我们可以认为各部分所受到的重力作用集中于一点,这一点叫做物体的重心.为什么集中在一点 听汇报用英语怎说 高空700米掉下 黄豆大的石头能砸死人吗是不和子弹一样 物理电学单位如何读? 春天的一个夜晚,一个就别家乡的人,望着皎洁的月光不禁想起了家乡,于是便吟起诗来( ) 世界上哪个国家的人活的岁数最大? 重心;一个物体的( )受到重力的作用,从效果上看,我们可以等效的认为各部分说到重力的作用集中在一点,这一点叫做物体的( ). 春天的一个夜晚,一位久别家乡的人,望着皎洁的月光不禁想起了家乡,于是吟起诗来 世界上有那些行星?比如说有矮行星、金星等一些行星. 尼比鲁会不会是从太阳里面出来的? 春天的一个夜晚,一位久别家乡的人,望着皎洁的人月光不禁想起了家乡,于是吟起诗 做凉糕没有石灰水用什么能代替 重力的作用点称为重心,从效果上看,我们可以认为各部分受到的重力集中在一个点上,这个点叫做物体的重心,物体重心位置与什么因素有关?是如何进行确定的? 美的空调51变频出现PR是什么意思? 分解重力重力为G的物体静止在倾角为a的斜面上,将重力G分解成垂直于斜面向下的分力F1和平行于斜面向下的分力F2F1就是物体对斜面的压力,这句话为什么不对 α=6°24′40″等于多少度? 当代著名的物理学家之一斯帝芬.霍金,著有一本影响了全世界成千上万人的书.这本书是—— 这个重力怎么分解 虾爬子买回来后怎么洗?有没有什么讲究虾爬子和螃蟹一起做可以吗? 两股台风同袭 日本气象台长获权发布紧英国乔治小王子教父母共7人 多为威廉美军将撤离阿富汗 价值70亿美元军需分析称政府再停摆凸显美国政治新焦点劝诫移民“回家”广告遭批 英国取消推新加坡消费者花数万元上金融课讲师竟是印度一农民家园遭洪灾破坏 政府仅给一马来西亚妇女操作轿车不当误撞死邻居7伊拉克西部省份遭遇枪击炸弹袭击 28美政府停摆谈判内幕:众议院领袖称不屑澳新州消防部门提醒当地居民撤离以应对妻子选总统 洪都拉斯被罢黜总统或可重QQ群里热聊\"如何结束生命\" 2浙江省新增1例人感染H7N9禽流感病美“天鹅座”货运飞船与国际空间站对接中亚论坛专家学者呼吁加强双边多边务实外交部:中方欢迎苏丹、南苏丹就多项议报告显示澳洲1/4家庭中女性开始养家印度一农民家园遭洪灾破坏 政府仅给一中泰战略合作新契机或在高铁合建柬专家认为中国-东盟自贸区升级有利双呼图壁镇双桥社区调解员化纠纷解民忧机场高速五元桥东疏堵改造后通行能力提过年了,拍张高逼格的全家福很有必要视界 | 重大发现!人类找到了“另一跟谁学视频、直播专区:炸裂的feel去玩吗推出租赁平台 上市计划正式启动我还年轻,我渴望上路 | 探索家新津构建“内联外合,四位一体”两法衔信和财富等P2P遭大连官方通报:涉嫌酒行业B2B成风口 中酿酒团购布局全麦食尚禹化普:单品思维做手抓饼赚了1福州一渔船大浪中失控致2名船员遇险 ▍P2P为何能击败那么多理财产品,成黄渤:我如何征服看脸的时代首位大陆华人移民当选加拿大国会议员开业内透露银监会P2P监管细则将出台 你是我一生中的一件最美好的事信和财富等P2P遭大连官方通报:涉嫌羊年春节祝福朋友们扬眉吐气、洋洋得意【图个八卦】带我去最像地球的行星从年少轻狂,到古稀之年,陪我去完成好
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘