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

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 

【信息图】到2020年开发者、设计师、测试员的数量将达到史无前例的高度 推广与盈利专题论坛:中国影响世界,世界定义中国 SlideIdea CEO李建忠:移动产品的技术面思考 BDTC→→百度林仕鼎、腾讯蒋杰、阿里唐洪论道大数据平台与技术 谷歌首席互联网布道师:隐私保护并不是一种正常行为 微软公开“挑衅”谷歌,出售反谷歌标语T恤 四大UX设计原则,打造网站最佳浏览体验 【BDTC讲师】黄晓庆:从小灵通到Hadoop与实时大数据分析 【BDTC讲师】杨强:从禽流感预测到图片语义解释 2013中国大数据技术大会讲师议题正式发布 “2013中国大数据周”即将开幕 正式发布中国大数据现状白皮书 搜狐畅游发布3D游戏引擎Genesis-3D 基于MIT协议开源 传闻微软将收购AOL旗下的Winamp和Shoutcast 【BDTC讲师】大数据时代“掘金机”:百度、360、一淘搜索技术分享 谷歌董事长:审查,将会在十年内消失 50万奖金+天使投资:创维天赐家庭互联网创新大赛开幕 专利案苹果获胜:获赔2.9亿美元 三星不服将继续上诉 Google正打造Spark:一个基于Chrome App的集成开发环境 研发周报:成为一名PHP专家其实并不难 将Vistual Studio打造成为Node.js IDE 度量Web性能的关键指标 路由器未火够!高通发布互联网处理器 Unite2014大会:移动开发者的饕餮盛宴 玩与学并存 Kano kit让你自制Raspberry Pi电脑 【BDTC讲师】Hortonworks Gunther&Ted:HBase、Stinger的发展与实践 人人网推出开放平台2.0 多项重大改进吸引开发者回流 红帽高管:将Linux价值理念和做法延伸到OpenStack Fundation 5发布:号称最快版本,响应式用户体验更完善 程序员远程工作必会编程语言JavaScript 苹果确认收购3D传感技术公司PrimeSense 从电影《饥饿游戏》里学到的IT知识 现在的浏览器还支持不支持applet啊?高手救我!--------怎么写一个applet兼容更多的浏览器? 请问那里有这种工具??近来看看!! 请capboy等写过filter的各位前辈指点 利用DW制作一张确定最佳分辨率为800*600或者1024*768的页面, 急 求助: 怎样获得系统当前可用的字体? 如何打印FormView? 如果你是VC高手,对COM有深入了解,欢迎! 我今天看了我英语过级的公布成绩,我得了一个天险数字60。5分,请问。。。。。? 谁有linux下的mod_webapp.so DW UltraDev里rs.source="select * from stu where banci=request.QueryString("banci")这样是不是不行? Microsoft JDK nmake生成的EXE文件反编译问题!!! 各位大虾:请问谁能告诉我哪里能找到win xp home edition plus???如果能让我找到,送1000分 请问如何将PaintBox.Canvas的当前内容保存至内存, Linux下c语言程序该怎样运行? 请问:vb.net中oracle数据库能否支持blob格式? .ceb文件如何打开? 什么地方能够找到《Exploring Requiremengs:Quality Before Design》这本书? 关于制作一个classwizard的设计思路,欢迎大家讨论 weblogic server console: java.lang.NullpointerException 如何得到本局域网上所有主机的ip? 请问: 如果在网上可以通过网页上传某些文件到服务器空间上,并显示一些关于上传文件的信息~ 一段检测光软驱的程序,大家帮忙除Bug! 为何会死机? 高分放送,木马病毒求救! tomcat下的分布怎么做? 各位使用手机的老鸟,2000左右的手机什么牌子的好 喜欢硬件朋友请进来看看。 如何复原被Linux改写的引导扇区呢 请问各位大虾,怎样将c++同数据库结合起来 大哥......你继续看!!!??? 喜欢硬件朋友请进来看看。 在哪里调用方法?是在cpp文件还是在.h文件里? 初学者关于显示的问题? depunf朋友,您好,stringgrid那里有delete啊?敬请赐教! formula one报表打印问题 d3d头文件的错误? 执行了insert语句之后我怎么得到刚刚插入的id值啊?快快,在线等待 为什么找不到服务器? 如何禁止用户调整窗体大小?但最大化、最小化和关闭按钮仍在。 各位: 如何让系统认识带小数的字体如:7.5? 没有经验,请有实际经验的朋友回答:) 请问pb8.0+sqlserver2000怎么配置数据源!(sqlserver2000与asa7.0连接数据库时有什么不一样!) 光盘能装超过700MB的数据吗? 考程序员要考的内容? 100分呀,哪里有钱能的C++电子书下载? 同学的一台电脑,放mp3有声音,但是放mtv却没有了声音,是怎么回事? 在线等待,我的excel密码忘了,长度大约为6个到8个,请大家帮帮忙 请问,我在使用Excel制作表格的时候,有一项需要输入身份证号码。可是填入18位身份证号码后,一换行,号码的后3位会自动变为000。请大家 请教如何处理JSP网页中的路径问题? SQL 中如何与用户交互? 如何把参数传到框架页中的子页(aspx页)? 修改病句:由于长江流域连续干旱,导致同亭湖咸阳湖水面大面积减少,给人们生活带来很大影响. 小学描写松柏翠竹的诗句 松柏的特点? 位于长江流域的湖泊有 A洞庭湖和巴尔客什湖B洞庭湖和鄱阳湖C青海湖和巴尔客什湖D青海湖和鄱阳湖 描写松柏的毅力的诗句有哪些? 人体当中有多少种生物酶? 为证明光照和重力两种因素对生长素在植物体内的分布哪个影响更大 请问干的河豚鱼怎么吃,是杀好的晒干的, 什么是酵素?酵素对人体有什么好吃? 家里飞进2鸽子 正在做窝 我该怎么办?目前 做的窝停留在衔树枝上 没多少以前鸽子貌似住在家里(我家5楼)的墙壁凹槽里面我要怎么办 才能帮助它们 留下它们. 干的河豚要怎么吃才没有毒,具体要怎么做? 世界上寿命最长的动物是什么 科学家发现鸽子会按自己的生物时钟判断时间,再配合当时太阳的位置来导向飞回正确的巢位.现在将鸽子放在 植物的呼吸作用不是只在晚上进行么 河豚鱼」哪个部位是有毒的?jpt 动物细胞反应器应具有哪些基本要求?有哪些类型?特点是什么? 历史上有什么人物具有松柏的品质 河豚的什么部位有毒? 动物细胞反应器的结构,谢 柏树的精神是什么 人,动物,植物与大自然的关系是怎么样的?6年级寒假作业上的急! 采是什么意思 松柏具有什么精神? 河豚那个部位有毒 摘和采的意思摘杨芽,采柳叶这句话中,摘和采两字意思有何不同 松柏有什么品质? 河豚的哪个部位有毒 意思,必采,先来先采! 植物细胞的叶绿体内哪种色素进行能量转化?简要说明一下 河豚的毒在哪些部位 意思必采 河豚吃什么河豚鱼会吃其他的热带鱼吗? 为什么冬天的柏树是绿的? 植物根明明在地底下啊 按理说在重力作用下生长素应聚集在根尖处啊 为什么在近地侧 河豚可以吃吗?对身体有什么危害吗? 为什么冬天的柏树是绿的?3Q 生长素在重力作用怎么运输 河豚鱼怎么吃啊?朋友送给我了一条河豚,现在还或者呢..炸着吃可以么? 青少年网络文明公约 问一个古代汉语的题!子曰昔齐景公田招虞人以旌不至将杀之(虞人守苑囿之吏也招之当以皮冠而以旌故不至也)志士不忘在沟壑勇士不忘丧其元孔子奚取焉取非其招不往也如不待其招而往何哉 河豚怎么吃 怎么计算空间站寿命?或者说发送到太空中的空间站是有哪些方面影响到它的寿命? 氨水中的一水合氨的电离方程式是什么? 柏树的外形特征,作用是什么急 俄罗斯“和平号”空间站寿命15年 国际空间站工作寿命为15~20年 中国空间站? 请问对夹式蝶阀适用的最高压力是多少?根据国标GB/T12238-2008 中4.1规定对夹连接弹性密封的蝶阀其公称压力不大于PN16,即弹性密封对夹式蝶阀适用的最高压力约为1.6MPa,欧标PN16是以120℃为基准, 古代汉语言的一些题目,题型:是非题1、“武气绝,半日复息.”息:休息1、错 2、对 2 “空自苦亡人之地,信义安所见乎?” 见——现 ,古今字,表现选项:1、错 2、对 3、“乃徙武北海上无人处,使 柏树的外形特征 什么是煤矿超采超掘?什么是煤矿超前距? 亚马逊平原位于什么洲亚马逊平原位于__洲 请从哲学的角度看网络文化不用多,三四行字(约50字)就行. 煤矿掘探一体化是什么意思 亚马孙平原位于?A.亚洲B.非洲C.北美洲D.南美洲 柏树的特点有哪些 煤矿矿井开拓“先探后掘”是什么意思? 描写松柏的诗句要多一点,不要诗,不要复制的快 松柏特点松柏的特点,要有体会 OCT反应器是什么意思? 描写松柏的优美句子 在我国青少年中发展积极向上的网络文化蕴含了哪些哲学思想
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘