Android应用开发-数据存储

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章数据存储5.1文件存储5.2JSON数据格式5.3轻量级存储SharedPreferences5.4SQLite数据库章目录35.1文件存储文件存储是Android中最基本的一种数据存储方式,与Java类似,都是通过I/0流的形式把数据直接存储到文档中,不同的是Android中的文件存储分为内部存储和外部存储。45.1.1内部存储数据以文件方式存储到设备的内部,默认位于data/data/packagename/files/目录下。文件被其所创建的应用程序私有,当创建的应用程序被卸载时,文件也随之被删除。内部存储使用的是Context提供的openFileoutput方法和openFilelnput方法,通过这两个方法可以分别获取FileOutputStream对象和FilelnputStream对象,然后进行读写操作。openFileOutput用于打开输出流,将数据存储到指定的文件中;openFileInput用于打开输入流,读取指定文件中的数据;其中参数“name。表示文件名,mode表示文件的操作模式,也就是读写文件的方式。Fileoutputstreamfos=openFileOutput(Stringname,intmode);Filelnputstreamfis=openFileInput(Stringname);55.1.1内部存储使用FileOutputStream对象将数据存储到文件中,示例代码如下。将数据存储到文件StringfileName=data.txt;Stringcontent=helloworld;//保存数据FileOutputStreamfos;try{fos=openFileOutput(fileName,MODE_PRIVATE);fos.write(content.getBytes());//将数据写入文件中fos.close();//关闭输出流}catch(Exceptione){e.printStackTrace();}在上述代码中定义了文件名“data.txt”,以及要写入的数据“helloworld”,然后创建对象fos,通过write()方法将数据写入文件。65.1.1内部存储取出数据时,使用FilelnputStream对象读取数据,示例代码如下从文件读取数据Stringcontent=;FileInputStreamfis;try{fis=openFileInput(data.txt);//获得文件输入流对象byte[]buffer=newbyte[fis.available()];//创建缓冲区,并获取文件长度fis.read(buffer);//将文件内容读取到buffer缓冲区content=newString(buffer);//转换成字符串fis.close();//关闭输入流}catch(Exceptione){e.printStackTrace();}在上述代码中,首先通过Context的openFilelnput()方法获得文件输入流对象,然后创建byte数组buffer为缓冲区,获取文件长度,再通过read()将文件内容读取到buffer缓存区,最后转换成字符串。75.1.1内部存储【例5-1】读取与保存文件的应用程序示例。读取与保存文件示例8312外部存储是指将文件存储到一些外部设备上,如SD卡,属于永久性的存储方式。外部存储的文件可以被其他应用程序所共享。由于外部存储设备可能会被移除、丢失或处于其他状态,因此在使用外部设备之前必须使用Environment.getExternalStorageState()方法来确认外部设备是否可用。访问SD卡文件,参考前面第三章的3.1.4节。5.1.2外部存储95.1.2外部存储Stringstate=Environment.gtExternalStorageState();//获取外部设备//判断外部设备是否可用if(state.equals(Environment.MEDIA_MOUNTED)){FileSDpath=Environment.getExternalStorageDirectory();//获取SD卡目录Filefile=newFile(SDPath,data.txt);Stringdata=Helloworld;FileOutputStreamfos;try{fos=newFileOutputStream(file);fos.write(data.getBytes());fos.close();}catch(Exceptione){e.printStackTrace();}}向SD卡中存储数据Environment的getExternalStorageState()方法和getExternalStorageDirectory()方法,分别用于判断是否存在SD卡和获取SD卡根目录的路径。由于手机厂商不同,SD卡根目录也可能不同,因此要避免把路径写死而找不到SD卡。105.1.2外部存储Stringstate=Environment.getExternalStorageState();FileInputStreamfis=null;if(state.equals(Environment.MEDIA_MOUNTED)){FileSDPath=Environment.getExternalStorageDirectory();Filefile=newFile(SDPath,data.txt);try{fis=newFileInputStream(file);byte[]buffer=newbyte[1024];//中括号内采用参数1024或fis.available()均可。//fis.available()可以得到输入流文件的实际字节数。intbytes=fis.read(buffer);Stringstr=newString(buffer,0,bytes);}catch(Exceptione){e.printStackTrace();}}从SD卡中读取数据通过FileInputStream对象fis获得文件输入流,然后创建byte数组buffer为缓冲区,再通过read()将文件内容读取到buffer缓存区,最后转换成字符串。115.1.2外部存储Android系统为了保证应用程序的安全性,必须要在清单文件中声明权限才可以。在AndroidManifest.xml的manifest节点中添加SD卡的读写权限,代码如下。在AndroidManifest.xml清单中申请权限uses-permissionandroid:name=android.permission.READ_EXTERNAL_STORAGE/uses-permissionandroid:name=android.permission.WRITE_EXTERNAL_STORAGE/uses-permissionandroid:name=android.permission.MOUNT_UNMOUNT_FILESYSTEMS/125.1.2外部存储【例5-2】读取与保存文件的应用程序示例。从SD卡读取与保存文件示例5.1文件存储5.2JSON数据格式5.3轻量级存储SharedPreferences5.4SQLite数据库章目录145.2.1JSON数据介绍-÷×+JSON(JavascriptObjectNotation)是近几年才流行的一种新的数据格式,它与XML非常相似,但相对于XML来说,解析速度更快,占用空间更小。JSON是一种轻量级的数据交换格式,与xml一样,也是基于纯文本的数据格式。客户端和服务器的数据交换格式,往往通过JSON来进行交换。尤其是web开发。JSON正成为理想的数据交互语言,易于阅读和编写,同时也易于机器解析和生成。15两种数据结构:对象结构JSONObject、数组结构JSONArray5.2.2JSON的数据结构01对象结构JSONObjectJSON对象可以包括多个键值对,要求在大括号“{}”中书写。最简单的JSON对象,例如{城市:大理}稍复杂的JSON对象,例如:{城市:大理,日期:20180103,天气:0-14度,多云,风力:2}JSON对象的值也可以是另外一个JSON对象,例如:{城市:大理,日期:20180103,天气:0-14度,多云,未来3天气温:{20180104:0-16度,晴,20180105:1-18度,晴,20180106:2-19度,晴转小雨}}165.2.2JSON的数据结构01数组结构JSONArrayJSON数组可以包含多个JSON对象做元素,每个元素之间用逗号“,”分隔,最外面用方括号“[]”。JSON数组是JSON对象的有序集合。如果想访问数组第一个元素的属性“城市”,可以这样表示:weather[0].城市,其返回值为“大理”。varweather=[{城市:大理,气温:0-14度,多云},{城市:成都,气温:2-4度,小雨},{城市:拉萨,气温:-9-5度,多云}]17解析JSON格式数据,需要使用JSONObject对象和JSONArrary对象。JSONObject对象,是{key:value}键值对格式。例如:JSONArray对象,是JSON数组格式,存放的是一个或者多个JSONObject对象。例如:5.2.2JSON的数据结构JSON的对象JSONObjectsz=newJSONObject();//单个JSON对象sz.put(城市,深圳);sz.put(气温,30);JSONObjectcd=newJSONObject({\城市\:\成都\,\气温\:\21-28度,小雨\});weather=newJSONArray();weather.put(sz);weather.put(cd);185.2.3JSON文件JSON文件的扩展名是“.json”可以用记事本或其他编辑工具编写JSON文件例如文件weather.json,内容如下:{city:深圳,date:15日星期日,high:高温29℃,fx:无持续风向,low:低温25℃,type:中雨}195.2.4解析JSON数据下面通过一个示例说明解析JSON数据的方法。【例5-3】解析JSON格式数据示例。布局的控件层级关系和属性解析JSON格式数据示例5.1文件存储5.2JSON数据格式5.3轻量级存储SharedPreferences5.4SQLite数据库章目录215.3轻量级存储SharedPreferencesAndroid系统提供了一个存储少量数据的轻量级的数据存储方式SharedPreferences。该存储方式类似于Web程序中的Cookie,通常用它来保存一些常用信息,例如用户名及密码等。SharedPreferences对象采用键值对的形式组织和管理数据,其数据存储在XML格式的文件中。225.3轻量级存储SharedPreferences【例5-4】应用SharedPreferences对象保存一个客户的联系电话。布局的控件层级关系、属性和界面效果5.1文件存储5.2JSON数据格式5.3轻量级存储SharedPreferences5.4SQLite数据库章目录245.4.1SQLite数据库简介SQLite数据库是一个关系型数据库,因为它很小,引擎本身只是一个大小不到300KB的文件,所以常作为嵌入式数据库内置在应用程序中。SQLite生成的数据库文件是一个普通的磁盘文件,可以放置在任何目录下。SQLite是用C语言开发的,开放源代码,支持跨平台,被所有的主流编程语言支持。SQLite是一个非常优秀的嵌入式数据库。SQLite数据库的管理工具很多常用的有SQLiteExpertProfessional,可以在可视化的环境下完成所有数据库操作,可以方便地创建数据表和对数据记录进行增加、删除、修改、查

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功