Android-10-数据存储

Android-10-数据存储,第1张

概述1.数据存储方式(1)文件存储:该存储方式是一种较常用的方法,在Android中读取/写入文件的方法,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。可以存储大数据,如文本、图片、音频等。(2)SharedPreferences:它是Android提供的用来存储一些简单的配置信息的一种机制 1.数据存储方式


(1)文件存储:该存储方式是一种较常用的方法,在AndroID中读取/写入文件的方法,提供了openfileinput()和 openfileOutput()方法来读取设备上的文件。可以存储大数据,如文本、图片、音频等。
(2)SharedPreferences:它是AndroID提供的用来存储一些简单的配置信息的一种机制,采
用了XML格式将数据存储到设备中。可以存储应用程序的各种配置信息,如用户名、密码等。
(3)sqlite数据库: sqlite 是AndroID自带的一个轻量级的数据库,支持基本sql语法,利
用很少的内存就有很好的性能,-般使用它作为复杂数据的存储引擎,可以存储用户信息等。
(4)ContentProvIDer: AndroID 四大组件之一,主要用于应用程序之间的数据交换,它可以将
自己的数据共享给其他应用程序使用。
(5)网络存储:需要与AndroID网络数据包打交道,将数据存储到服务器上,通过网络提供的
存储空间来存储/获取数据信息。


2.文件存储

      文件存储分很多种形式,JsON与XML都是比较常用的,XML存储的数据结构比较清晰,而JsON更轻量级,使用更简单。文件存储是AndroID中最基本的一种数据存储方式,它与Java中的文件存储类似,都是通过l/O流的形式把数据直接存储到文档中。不同的是,AndroID 中的文件存储分为内部存储和外部存储。
      (1)内部存储是指将应用程序中的数据以文件方式存储到设备的内部(该文件默认位于data/data/<packagename>/iles/目录下),内部存储方式存储的文件被其所创建的应用程序私有,如果其他应用程序要 *** 作本应用程序中的文件,需要设置权限。当创建的应用程序被卸载时,其内部存储文件也随之被删除。
      内部存储使用的是Context提供的openfileOutput()方法和openfilelnput()方法,通过这两个方法可以分别获取fileOutputStream对象和filelnputStream对象,然后进行读写 *** 作,示例

fileOutputstream fos = openfileOutput (String name, int mode);fileinputStream fis=openfileinput (String name) ;

在上述代码中,openfileOutput()用于打开应用程序中对应的输出流,将数据存储到指定的文件中; openfilenput)用于打开应用程序对应的输入流,读取指定文件中的数据;其中参数"name”表示文件名,"mode" 表示文件的 *** 作模式,也就是读写文件的方式,它的取值有4种,具体如下。
●MODE PRIVATE:该文件只能被当前程序读写;
●MODE APPEND:该文件的内容可以追加;
●MODE_WORLD_READABLE:该文件的内容可以被其他程序读;
●MODE_ WORLD_ WRITEABLE: 该文件的内容可以被其他程序写。
       AndroID系统有一套自己的安全模型,默认情况下任何应用创建的文件都是私有的,其他程序无法访问,除非在文件创建时指定了 *** 作模式为MODE _WORLD_READABLE或者MODE_WORLD_WRITEABLE。 如果希望文件能够被其他程序进行读写 *** 作,需要同时指定MODE WORLD _READABLE和MODE WORLD_ WRITEABLE权限。
      存储数据时,使用fileOutputStream对象将数据存储到文件中,示例代码如下。

String filename = "data.txt"; //文件名称String content = "helloworld"; //保存数据fileOutputStream fos;try {fos = openfileOutput (filename, MODE PRIVATE) ;fos. write (content.getBytes()); ! //将数据写入文件中fos.close() ;/ /关闭输出流} catch (Exception e) {e.printstacktrace() ;}

取出数据时,使用filenputStream对象读取数据,示例代码如下。

String content =”";fileinputStream fis;try {fis= openfileinput ("data. txt") ;//获得文件输入流对象byte[] buffer = new byte [fis. available()];//创建缓冲区,并获取文件长度fis. read (buffer) ;//将文件内容读取到buffer缓冲区content = new string (buffer);//转换成字符串fis.close() ;//关闭输入流} catch (Exception e) {e.printstacktrace() ;}

(2)外部存储

      外部存储是指将文件存储到一些外部设备上,例如SD卡或者设备内嵌的存储卡,属于永久性的存储方式(该文件通常位于mnt/sdcard目录下,不同的手机路径不同)。外部存储的文件可以被其他应用程序所共享,当将外部存储设备连接到计算机时,这些文件可以被浏览、修改和删除,因此这种方式不安全。由于外部存储设备可能被移除、丢失或者处于其他状态,因此在使用外部设备之前必须使用Environment.getExternalStorageState()方法来确认外部设备是否可用,当外部设备可用并且具有读写权限时,那么就可以通过fileinputStream、fileOutputStream 对象来读写外部设备中的文件。
      向外部设备(SD卡)中存储数据的示例代码如下。

String state = Environment . getExternalStorageState(); // 获取外部设备,判断是否存在SD卡if (state .equals (Envi ronment . MEDIA MOUNTED)) {//判断外部设备是否可用file Sdpath = Envi ronment . getExternalStorageDirectory();//获取SD卡目录file file = new file (Sdpath,"data.txt");String data = "HelloWorld";fileOutputStream fos;try {fos = new fileOutputStream(file);fos.write (data.getBytes());fos.close() ;} catch (Exception e) {e.printstacktrace();}}

      从外部设备(SD卡)中读取数据的示例代码如下。

String state =Envi ronment . getExternalStorageState() ;if (state .equals (Envi ronment . MEDIA MOUNTED)) {file Sdpath = Envi ronment. getExternalStorageDi rectory() ;file file = new file (Sdpath, "data. txt") ;fileinputStream fis;try{fis = new fileinputStream(file) ;BufferedReader br = new Buf feredReader (new inputStreamReader (fis));String data = br. readline() ;} catch (Exception e){e.printstacktrace() ;}}

需要注意的是,AndroID系统为了保证应用程序的安全性做了相应规定,如果程序需要访问系统的一些关键信息,必须要在清单文件中声明权限才可以,否则程序运行时会直接崩溃。由于 *** 作SD卡中的数据属于系统中比较关键的信息,因此需要在清单文件的<manifest>节点中添加SD卡的读写权限,示例代码如下。

<uses-permission androID: name="androID. permission.WRITE_EXTERNAL_STORAGE"/><uses-permission androID:name="androID. permission.READ_EXTERNALSTORAGE"/>
3.XML解析 

      XML在各种开发中应用都很广泛,在AndroID中若要 *** 作XML文件,首先需要将XML文件解析出来。通常情况下,XML文件有3种解析方式,分别是DOM解析、SAX解析和PulL解析,接下来针对这3种方式进行简单的介绍。
(1)DOM解析
      DOM解析会将XML文件中所有内容以DOM树(文档树)形式存放在内存中,然后通过DOM API 进行遍历、检索所需的数据,根据树结构以节点形式来对文件进行 *** 作,支持删除、修改功能。需要注意的是,由于DOM需要先将整个XML文件存放在内存中,消耗内存较大,因此,较大的文件不建议采用这种方式解析。
(2)SAX解析
      SAX解析会逐行扫描XML文件,当遇到标签时触发解析处理器,采用事件处理的方式解析XML文件。它在读取文件的同时即可进行解析处理,不必等到文件加载结束,相对快捷,可解析超大的XML文件。缺点是SAX解析只能读取XML中的数据,无法进行增、删、改功能。
(3)PulL解析
      PulL解析是一个开源的Java项目,既可以用于AndroID应用,也可以用于JavaEE程序。AndroID已经集成了PulL解析器,因此,在AndroID中最常用的解析方式就是PulL解析。
      使用PulL解析XML文档,首先要创建XMLPullParser解析器,该解析器提供了很多属性,通过这些属性可以解析出XML文件中的各个节点内容。
      XmlPullParser的常用属性如下:
      ●XmlPullParser START document: XML文档的开始,如<?xml version="1.0" enCoding="utf-8"?>。
      ●XmlPullParser.END document: XML文档的结束。
      ●XmlPullParser.START TAG:开始节点,在XML文件中,除了文本之外,带有尖括号< >的都是开始节点,如<weather>。
      ●XmlPullParser.END TAG: 结束节点,带有</ >的都是结束节点,如</weather>。

@H_403_86@

4.JsON解析

AndroID平台上有两种解析技术,一种是通过 AndroID内置的org.Json包,一种是通过Google的开源Gson库,

{"name": "zhang","age": 27,"marrIEd":true}    //Json1是一个Json对象[16,26,3]                    //Json2是一个数字数组

(1)使用org.Json解析JsON数据
AndroID SDK中为开发者提供了org.Json, 可以用来解析JsON数据。由于JsON数据只有JsON对象和JsON数组两种结构,因此org.Json包提供了JsONObject和JsONArray两个类对JsON数据进行解析。
      使用JsONObject解析JsON对象,示例代码如下。

JsONObject Json0bj = new JsONobject (Json1) ;String name = JsonObj . optstring ("name") ;int age =JsonObj .optInt ("age") ;boolean marrIEd =JsonObj . optBoolean ("marrIEd");

      使用JsONaray解析JsON数组,示例代码如下。

JsONArray  JsonArray = new JsONArray (Json2);for(int i= 0; i< JsonArray. length(); i++){int age = JsonArray.optInt(i);}

     从上述代码可以看出,数组的解析方法和对象类似,只是将key值替换为数组中的下标。另外,代码中用到了optInt()方法, 这种方法在解析数据时是安全的,如果对应的字段不存在,则返回空值或者0,不会报错。
(2)使用Gson解析JsON数据
Gson库是由Google提供的,若要使用Gson库,首先需要将gson,jar添加到项目中,然后才能调用其提供的方法。
使用Gson库之前,需要创建JsON数据对应的实体类Person,需要注意的是,实体类中的成员名称要与JsON数据的key值一致。 该Person类比较简单,初学者自行创建即可。
   使用Gson解析JsON对象,示例代码如下。

Gson gson = new Gson() ;Person person=gson. fromJson(Jsonl, Person.class) ;

   使用Gson解析JsON数组,示例代码如下。

Gson gson = new Gson() ;Type ListType =new Typetoken<List<Integer>>l){}.getType();List<Integer> ages = gson. fromJson (Json2,ListType) ;

5.SharedPreferencesd的使用

 

总结

以上是内存溢出为你收集整理的Android-10-数据存储全部内容,希望文章能够帮你解决Android-10-数据存储所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007112.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存