Android-10-数据存储

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>。

4.JSON解析

(2条消息) json数据_木白星枝的博客-CSDN博客

5.SharedPreferencesd的使用

SharedPreferences是Android平台上一个轻量级的存储类,是一种最容易理解和使用的存储技术,主要用于存储一些应用程序的配置参数,例如用户名、密码、自定义参数的设置等。它是通过key/value (键值对)的形式将数据保存在XML文件中,该文件位于data/data/<packagename>/shared prefs文件夹中。需要注意的是,SharedPreferences 中的value值只能是Float、Int、 Long、Boolean、 String、 StringSet类型数据。
(1)存储数据
使用SharedPreferences 类存储数据时,首先需要调用getSharedPreferences(String name,int mode)方法获取实例对象。由于该对象本身只能获取数据,不能对数据进行存储和修改,因此需要调用SharedPretferences的edit()方法获取到可编辑的Editor对象,最后通过该对象的putString()方法和putint()方法存储数据,示例代码如下。
//获取sp对象,参数data表示文件名,MODE PRIVATE 表示文件操作模式

SharedPreferences sp = getSharedPre ferences ("data", MODE_PRIVATE) ;
SharedPreferences. Editor editor=sp.edit() ;//获取编辑器
editor. putstring ("name", "传智播客");//存入string类型数据
editor .putInt("age", 8);//存入Int类型数据
editor . commit() ;//提交修改

从上述代码可以看出,Editor 对象是以key/alue的形式保存数据的,并且根据数据类型的不同,会调用不同的方法。需要注意的是,操作完数据后,-定要调用commit()方 法进行数据提交,否则所有操作不生效。
如果需要删除数据,则只需要调用Editor对象的remove(String key)方法或者clear()方法即可.

editor.remove ("name") ;//删除一条数据
editor.clear() ;//删除所有数据

(2)获取数据
使用SharedPreferences类获取数据时非常简单,只需要获取到SharedPreferences对象,然后通过该对象的getxxx()方法获取到相应key的值即可,示例代码如下。

SharedPreferences sp = getSharedPreferences ("data", MODE_PRIVATE) ;
String data=sp.getstring ("name", ""); // 获取用户名

需要注意的是,getxxx()方法的第二个参数为缺省值,如果sp中不存在该key, 将返回缺省值,例如getString("name", "),若name不存在,则key就返回空字符串。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值