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

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 

serialize()-JQuery API Accordion(settings)-JQuery API activate(index)-JQuery API button(hash)-JQuery API center()-JQuery API $.cookie(name)-JQuery API $.cookie(name, value, options)-JQuery API height()-JQuery API innerHeight()-JQuery API innerWidth()-JQuery API offset()-JQuery API outerHeight()-JQuery API outerWidth()-JQuery API scrollLeft()-JQuery API scrollTop()-JQuery API width()-JQuery API ajaxForm(object)-JQuery API ajaxSubmit(object)-JQuery API clearForm()-JQuery API clearInputs()-JQuery API fieldSerialize(true)-JQuery API fieldValue(successful)-JQuery API formSerialize(true)-JQuery API formToArray(true)-JQuery API resetForm()-JQuery API $.recallDroppables()-JQuery API $.SortSerialize()-JQuery API Draggable(hash)-JQuery API DraggableDestroy()-JQuery API Droppable(options)-JQuery API DroppableDestroy()-JQuery API DLL高手请入,关于在DLL中引出对象的问题?????? 求教!!有关DLL调用中返回字符串类型出错的问题。 Delphi怎么实现子类化? session 和 cookie 各有千秋,区别在那里啊?敬请赐教! fm1008leaf(小幻姬(玉笛书生的徒弟)):我考考你就知道你是真是假! jneu(沧海桑田)怎么不理我?有关宏拷贝问题 paradox中的NUM类型在sql语句中是什么类型?为什么asfloat会出错? 关于J2EE的就业前景,值不值的花二万元参加一个二十天的培训,欢迎大家热烈讨论 在listbox 中,如果知道了一个Item的内容,怎么知道它的indix 今有同仁问到,三十以后咋过。恰巧心情郁闷,发上几句牢骚。 少年暗恋对象,早已嫁作人妇。那天遇见街头,孩子叫我叔叔。 OICQ问题! 如何可获得Table 内字段的类型及长度? windows2000 server 的internet 共享怎样设置权限 软件开发的请进来讨论,关于报酬的问题。大家多提建议。 1.为什么有些地方可以用MessageBox函数,有些地方不可以2.mfc的CView::OnFilePrint提供了打印的方法,要是一个程序没有视图要打印一般用什么方法? 请问在DEVELOP2000里面可以使用进度条控件吗?怎么编程实现? ???oracle监听器问题? WebBrowser控件获得网页中文本框的名称该如何写? CFtpConnection 怎样在FastReport中控制或判断所连接的数据库表到了eof? CTypedPtrList模板对象中,如何删除指定位置的元素??十分着急! ms sql server 的技术问题 怎样清除事务日志????????? 在那里改个人在cdsn.net注册信息(如名字,地秩)? 关闭窗口的事件如何触发?( 高手们请问deiphi如何实玩宏代换???????????十分火急!!!!!!! 请帮忙!!SOS!!! 请问如何实现宏代换????????????? 关于打印的一个不错的设想 我是新手,初次接触网络管理,请问要管理局域网需要具备哪些方面的知识,需要安装那些应用软件?有什么好书可以介绍吗?谢谢各位! 在VB中设计控件,其上放有uText1、Text2,当uText1失去焦点时,并不触发Validate事件 如何在程序中判断是否做了超级连接? 怎样使listview中的大图标左右居中,上下居中。 怎么样处理聊天室的退出问题? 比较大的问题,请做过JAVA系统集成方案的朋友指点!!! applet,这个霸道的家伙!怎么解决阿? c++类的一个小问题 一个大家都很棘手的问题 关天构造函数的问题 学习《windows程序设计》中的问题? pb8里的autoscript怎么弹出那么慢 消息:c++与Visaul c是不是有一定的区别呢? 怎样通过程序获得当前可用的拨号网络列表?? 高手在哪里?-------> 如何在第一时间里获得屏幕的变化呢?及获得屏幕变化的那部分?各位大师,帮帮我。谢了。 请问想具备基本的网络和数据库管理方面的知识,看什么书好啊?请大家帮忙推荐一下,谢谢! 请教W2k下使用Access的问题 大家帮帮忙,sql菜鸟问题, 各位兄弟帮忙看一下 谁知道高程分数线?拜托告知一声! 如何判断是否做了超级连接? vc中怎样调用dos下的代参数的可执行文件???请教! 如何让TreeView控件的每一个子节点前有一个多选框! 食盐加碘为什么只可加碘酸钾而不可加碘单质或其他碘化合物? 食盐中碘含量 2011年高一化学期末检测试题最后一题取4、6g某有机物在氧气中完全燃烧,只有二氧化碳和水蒸气生成.现将生成的混合气体先通过足量硫酸,浓硫酸增重5、4g,再将剩余气体通过澄清石灰水生成 为什么要吃含碘的盐? 1.五水硫酸铜和硫酸铜溶液有什么区别?不是硫酸铜加水得到五水硫酸铜吗?2.硫酸铜溶液是由无水硫酸铜加水得来的吗?3.CuSO4·5H2O是属于化合物还是什么?4.水合结晶硫酸铜又是怎么回事?是什么 高一化学必修2期末试题 加碘食盐所含的碘元素是以什么形式存在的.单质还是化合物? 硫酸铜五水硫酸铜无水硫酸铜无水硫酸铜不能容解是吗?如果能溶解,那它的溶质叫什么?五水硫酸铜溶解以后的溶液叫五水硫酸铜还是硫酸铜?为什么?具体有什么区别? 无水硫酸铜在空气中短期放置是否会变色短期放置 能否在试验中用于测试空气中是否有水分?若不能 应怎样测试? 无水硫酸铜加水是化学反应吗? 如何由硫酸铜溶液怎么得到五水硫酸铜? 一包食盐质量为1kg,其中含碘酸钾5%,则这包食盐中含碘元素的质量是多少?答案是0.03kg,求过程. 无水硫酸铜吸水变蓝是化学反应么/ 高一化学题(气体摩尔体积计算)在标准状况下,11.2LCO和CO2的混合气体质量为20.4 g.求它们的体积之比和质量之比. 一包食盐质量为1kg其中含碘酸钾5kg则食盐中含碘元素的质量是?说出原因,写出计算过程. 无水硫酸铜溶于水是化学反应吗 一道高一化学题(关于气体摩尔体积计算)19世纪有些化学家测定某元素R的相对原子质量时,采用的办法是:用等容积的烧瓶4只,分别盛入N2、X、Y、Z四种气态物质,操作时先把烧瓶抽成真空,充 1kg某食盐中含碘35±15mg,则含碘酸钾应为多少克? 高一“碱金属”的化学计算题1-2个正确选项!标况下,CO2、CO的混合气体充满盛有足量NA2O2的密闭的22.4L的容器中.用火花使其反应完全.反应后,容器内有:()A.0.5molCO B.0.125molCO2 c.0.25mol NA2CO3 D.0.5 高一化学气体摩尔体积练习在同温,同压下,A容器的氯气和B容器的氨气中,若他们所含的原子数相等,则这两个容器的体积比是?A 2:1B 2:3C 1:2D 1:3 1kg食盐中最多含有碘元素的质量是多少? 化学计算题,关于金属的某样品为铜和锌的合金,为测定合金中铜的含量,取用20G此样品,分四次向其中加入稀盐酸与这充分反应.每次所用盐酸体积与反应剩余固体的质量如下:第次 样品质量(G CS2(常温下为液体)在氧气中充分燃烧生成SO2和CO2,若0.1mol CS2在1mol O2中完全燃烧,反应后气体混合物在标准状况下的体积是多少? 食盐中的碘含量是元素含量还是碘酸钾含量? 化学金属的计算题,急.小娟取CU-ZN合金的粉末32.5g,与该足量盐酸反应后,产生了0.4kg的气体,计算 出该合金中铜的质量分数. 高一化学题下列说法正确的是()A 28克氮气所含有的原子数目为NAB 4克金属钙变成钙离子时失去的电子数目为0.1NAC 1mol甲烷的质量与NA个甲烷分子的质量之和相等D 标准状态下,22.4L甲烷和乙炔混 物质的量 有关的计算题...已知K的氧化物有K2O2和 KO2,在这两种化合物组成的混合物中,钾和氧的质量之比为13:8,求混合物中K2O2和 KO2的物质的量之比.. 一道化学计算题,(一)将一定量 Cl2 通入250mL KBr 溶液中,反应后将溶液蒸干,测知所得固体中含溴元素10g,且 K+ 与 Cl- 的物质的量之比为2:1.试求:(1)通入Cl2的体积(标准状况).(2)原KBr 由某二价金属氧化物和某三价金属氧化物的等物质的量组成的混合物两者之比为28:51,取这种混合物19.75克,恰好能与166mL浓度为20%、密度为1.10g/立方厘米的盐酸反应.试求这两种金属的相对原 市场上有卖不含碘的盐吗?是什么品牌的? 食醋是不是就是白醋? 托盘天平两端的烧杯中各盛浓度和质量都相同的足量稀硫酸,此时天平平衡;然后向一烧杯中加入6克镁粉,向另一烧杯中加入6克铜铝合金,充分反应后,托盘天平仍保持平衡,则铝铜合金中铜的质 怎样测试盐含不含碘把土豆切开放点盐,土豆变色就是含碘,这种方法对吗? 食醋是不是白醋 【高一化学】检验碘的实验》》》卫生部规定食盐中必须加碘,其中碘以碘酸钾(KIO3)的形式存在.已知溶液中IO3(-)和I(-)可发生反应:IO3(-)+5I(-)+6H(+)====3I2+3H2O.据此反应,可用试纸和一些生活中 不含碘的食盐能吃吗 白醋是不是食醋? 设计一个试验检验含碘食盐中的碘试验原理,材料,仪器和要注意的问题 吃不含碘的盐好吗 白醋是不是叫食醋 检验食盐中的碘(实验)?验证食盐是否含碘,用一般家庭中有的东西能检验出来吗?如果不行的话,用用什么方法呢? 不含碘的食盐西安哪里有?盐务局?谁帮我问 请问水银和水会发生化学反应吗 无水硫酸铜与什么反应能变色还要在后面写出化学式 可使白色硫酸铜粉末变成蓝色晶体的气体是什么 砒霜和汞会产生什么化学反应?中药十九畏里已经明确说了``“水银莫与砒霜见”`` 两种药在一起用不但不会毒性相冲而消失``反而会比原来的毒性更强所以很好奇,砒霜和汞化学反应会产生什 氢气能使无水硫酸铜变色吗 白色CuSO4粉末通过什么会变成蓝色晶体 一道化学计算题 高一将6.9g钠和4.2g硅同时投入盛有足量蒸馏的大烧杯中 1、在标准状况下能收集到多少升氢气? 2、无气体生成后所得溶液体积恰好为100ml,求溶液中溶质的物质的量的浓度 无水硫酸铜放入水中变色是化学反应吗?是无水硫酸铜! 白色硫酸铜粉末加什么粉末变成蓝色晶体?化学式是什么 将氢氧化钠和碳酸氢钠的固体混合物20.8g在密闭容器中加热到约250℃,经充分反应后排出气体、冷却,称得剩余固体质量为15.9g.试计算混合物中氢氧化钠的质量分数.答案为68.1% ,如果是答案错了, 含碘食盐怎样日常保存?如题我想找些关于含碘食盐的日常保存的资料,做探究用的. 谁有高一化学上学期期末试卷 一道高一的化学计算题4.3gNa、Na20、 Na2O2的混合物语足量的水反应,生成0.36的混合气体,放点条件下,这些气体恰好完全反应,求各组成物质的质量.谢谢啦!可以顺便求出准确数值吗 怎么去除食盐里的碘 高一化学期末试题.在稀硝酸中加入CuO粉末,恰好将CuO全部溶解,溶解后无色溶液变____色.在所得溶液中加入过量铁粉,可得红色固体和浅绿色溶液,其反应方程式是____.滤出固体,在溶液中加入稀硫 我国规定食用加碘盐中碘元素的含量为每千克食盐含碘20ng-40mg.生产中通常加入碘元素的稳定化合物碘酸钾(KIO3)来达到这一生产标准.现有10t食盐,大约应加入多少碘酸钾?怎样才能使这些食 如何验证盐中含碘首先,在选购时应注意检验一下含碘量.用少许盐放入白瓷碗内,用水拦湿入微量漂白粉拌匀,再加入少量淀粉,搅拌观察.若盐中含碘,便呈蓝色,含碘越多,蓝色越深,若无碘则呈现 西宁2007-2008高一化学期末调研试卷
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn