您好,欢迎访问三七文档
《Android应用程序设计》第5章数据存储李华忠梁永生刘涛主编2019年12月18日人民邮电出版社提纲5.1项目导引5.2项目分析5.3技术准备5.3.1知识点1:文件存储5.3.2知识点2:SharedPreferences5.3.3知识点3:嵌入式数据库SQLite5.4项目实施提纲5.5技术拓展5.6本章小结5.7强化练习5.1项目导引数据存储是应用程序最基本的问题,我们在日常的软件开发中不仅是企业系统,还是应用软件都需要解决这一问题。当然,作为一款手机应用,同样需要数据存储来保存用户的基本数据以及应用程序所需要的数据。如何灵活的使用数据存储机制,方便、快捷的让用户检索、查询和使用数据是我们需要考虑的。5.1项目导引Android一共为我们提供了五种不同的数据存储方式。分别是:使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;5.1项目导引SharedPreferences主要是针对系统配置信息的保存,比如给程序界面设置了音效,想在下一次启动时还能够保留上次设置的音效。由于Android系统的界面是采用Activity栈的形式当我们的系统内存不足时会回收一些Activity界面,所以有些操作需要在不活动时保留下来,以便等再次激活时能够显示出来。又如,登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。5.1项目导引文件存储数据顾名思义就是将我们要保存的数据以文件的形式保存。当我们需要调用我们所保存的数据时只要读取这些文件就可以。需要注意,在Android下文件时Linux下的形式。Android内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们学的SQL语句基本都可以使用,我们自己创建的数据可以用adbshell来操作。具体路径是/data/data/package_name/databases。SQLite是一个开源的关系型数据库,与普通关系型数据库一样,也具有ACID的特性。5.1项目导引Android提供了ContentProvider,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。Android中的网络存储数据就是将我们的数据通过网络保存在网络上。在实际的使用中我们会使用java.net.*和android.net.*等类。5.2项目分析在我们的项目中经常会遇到不同的情况,使用不同的存储方式。比如,保存用户的用户名和密码我们可以使用SharedPreferences来保存。下次用户登录时不用再次输入用户名和密码即可登录。另外随着3G网络的不断普及,手机客户端仅仅作为内容呈现的工具以及用户交互的工具,数据更多的则是存储在服务器借助更大型的数据库来管理。在实际的项目开发中,我们需要根据实际的情况灵活选择不同的存储方式。下面我们就来学习一下Android下的存储方式。5.3技术准备5.3.1知识点1:文件存储Android中可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。在默认的情况下,文件是不能在不同的程序间共享的。在第一节我们也提到了,由于Android是以Linux为内核的,所以其File的形式也是Linux下的形式。用文件来存储数据可以通过openFileOutput方法打开一个文件,然后通过Load方法来获取文件中的数据,通过deleteFile方法可以删除一个指定的文件。在我们进入Files的实例演示之前,我们需要了解一个概念——Properties。Properties(属性),我们可以把Properties继承自Hashtable,理解成一个Hashtable,不过唯一不同的是,Properties对应的“键-值”必须是字符串形式的数据类型。Files数据存储主要是使用Properties配合FileInputStream或者FileOutputStream对文件写入操作。5.3技术准备5.3.1知识点1:文件存储表5-1中列举出了一些Properties常用的方法。表5-1Properties常用方法方法描述getProperty(Stringname,StringdefaultValue)通过指定的“name“即Key,搜索属性,参数二为默认值,即通过Key找不到文件中的属性时,要返回的默认值。返回值为Stringlist(PrintStreamout)通过PrintStream列出可读的属性列表,无返回值list(PrintWriterwriter)通过PrintStream列出可写的属性列表,无返回值方法描述save(OutputStreamout,Stringcomment)注意,这种保存方法己经过时,Google不推荐使用此种写法,这种方法忽略任何IO异常,所以在实际操作过程中,可能会发生不必要的异常。setProperty(Stringname,Stringvalue)设置属性,保存一个”键-值“对的属性store(OutputStreamout,Stringcomment)通过FileOutputStream打开对应的程序文件,然后通过Store保存之前Properties打包好的数据。这里备注可以为空storeToXML(OutputStreamos,Stringcomment)通过FileOutputStream打开对应的程序文件,将打包好的数据写入到XML文件。方法描述storeToXML(OutputStreamos,Stringcomment,Stringencoding)通过FileOutputStream打开对应的程序文件,将打包好的数据写入到XML文件,第三个参数可以指定编码。下面我们就来看一下Files在Android数据存储中的应用。5.3技术准备5.3.1知识点1:文件存储实例5-2演示的是与5-1相同的功能,虽在布局上做了修改,但是所实现的功能是相同的。我们可以对比一下SharedPreferences和Files在实现上的区别。首先看一下效果图,如图5-1和5-2所示。图5-1程序启动初始界面图5-2程序再次启动时默认账号和密码5.3技术准备5.3.1知识点1:文件存储下面就来看一下布局文件的代码,如代码清单5-1所示。代码清单5-1第五章\CH5_1\res\layout\main.xml?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:layout_width=fill_parentandroid:layout_height=fill_parentandroid:gravity=rightandroid:layout_gravity=rightandroid:background=@drawable/bgandroid:orientation=verticalTableLayoutandroid:layout_width=fill_parent“android:layout_height=wrap_contentandroid:stretchColumns=1TableRowandroid:gravity=centerandroid:layout_gravity=centerImageViewandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:id=@+id/ivlogo/ImageView/TableRow/TableLayoutTableLayoutandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:stretchColumns=1TableRowandroid:layout_marginTop=100dipTextViewandroid:layout_width=wrap_contentandroid:layout_marginLeft=20dipandroid:gravity=center_verticalandroid:layout_height=wrap_contentandroid:id=@+id/tvaccountandroid:text=帐号:android:textSize=20sp/TextViewEditTextandroid:layout_width=70pxandroid:layout_height=wrap_contentandroid:id=@+id/etaccountandroid:layout_marginRight=20dipandroid:maxLength=20/EditText/TableRowTableRowandroid:layout_marginTop=10dipTextViewandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:id=@+id/tvpwandroid:layout_marginLeft=20dipandroid:gravity=center_verticalandroid:text=密码:android:textSize=20sp/TextViewEditTextandroid:layout_width=70pxandroid:layout_height=wrap_contentandroid:layout_marginRight=20dipandroid:id=@+id/etpwandroid:inputType=textPassword/EditText/TableRow/TableLayoutLinearLayoutxmlns:android=:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:orientation=horizontalandroid:layout_marginTop=5dipandroid:layout_marginRight=20dipTextViewandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:id=@+id/tvclearandroid:text=清除Cookiesandroid:textColor=#aa0000android:textSize=12px/TextView/LinearLayoutTableLayoutandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:layout_marginTop=20dipTableRowandroid:gravity=centerandroid:layout_width=fill_parentButtonandroid:layout_width=100pxandro
本文标题:第5章数据存储.
链接地址:https://www.777doc.com/doc-2110505 .html