手把手教你学Android应用开发教程——第七章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
www.themegallery.com
读写其它应用SharedPreferences
要读写其它应用的SharedPreferences,前提是创建该 SharedPreferences的应用程序指定了相应的访问权限。 主要步骤如下: 1、需要创建其他程序对应的Context。(Android系统是根据 应用程序的包名来作为该程序的标识的) 2、调用其他应用程序的Context的getSharedPreferences (String name, int mode)即可获取相应的SharedPreferences对 象; 3、如果需要向其他应用的SharedPreferences数据写入数据, 调用SharedPreferences的edit()方法获取相应的Editor即可。 注意:前提是创建该SharedPreferences的应用程序指定了 相应的访问权限。
www.themegallery.com
SD卡文件存取
应用程序的数据文件保存在/mnt/sdcard目录下。
www.themegallery.com
SharedPreferences
SharedPreferences是一个接口,应用程序使用该接口可以快速而高效的 以键值对的形式保存数据,非常类似于Bundle。信息以XML文件的形式存储 在android设备上。
注意
在data/data文件夹下生成的目录结构如下:
文本
文本
login.xml文件的内容
<map>
<string name="psd">123456</string> <boolean name="isSavePsd" value="true" /> <string 文本 name="name">zhangsan</string> <boolean name="isAutoLogin" value="false" /> </map>
www.themegallery.com
SQLite数据库存储数据
查询语句:select * from 表名 where 条件子句 group by 分组字 句 having ... order by 排序子句 如:select * from person 分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3 条记录 select * from Account limit 5 offset 3 插入语句:insert into 表名(字段列表) values(值列表)。 如: insert into person(name, age) values(‘传智’,3) 更新语句:update 表名 set 字段名=值 where 条件子句。 如:update person set name=‘传智‘ where id=10 删除语句:delete from 表名 where 条件子句。 如:delete from person where id=10
www.themegallery.com
注意
如果希望文件被其他应用读和写,可以传入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE
应用程序的数据文件默认保存在/data/data/ <package name>/files目录下,文件的后缀名随意。
问题与讨论
1、当我们手机上不存在该文件时,我们先写后读与先读 后写有区别吗?程序会不会出错? (具体做法:把手机上 的content.txt文件删除,然后分别进行先写后读与先读后写操 作,观察效果)。 2、不同操作模式的区别,当我们多次执行写入操作时, 文件里的内容是被覆盖还是不断的在文件末尾附加新数据? (具体做法:修改openFileOutput()方法的第二个参数)。
FileInputStream openFileInput(String name):打开应 用程序的数据文件夹下的name文件对 应输入流。 FileOutputStream openFileOutput(String name, int mode):打开应用程序的数据文件夹下 的name文件对应输出流。
www.themegallery.com
SD卡文件存取
读、写SD卡上的文件步骤如下:
1、调用Environment的getExternalStorageState()方法判断手机上是否插
入了SD卡,并且应用程序具有读写SD卡的权限。
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果 手机装有SDCard,并且可以进行读写,那么方法返回的状态等于 Environment.MEDIA_MOUNTED。
www.themegallery.com
SQLite数据库存储数据
在Android平台上,集成了一个嵌入式关系型数据库SQLite, SQLite支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串 文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但 实际上SQLite也接受varchar(n)可变、char(n)、 decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的 五种数据类型。 SQLite最大的特点是可以把各种类型的数据保存到任何字段 中,而不用关心字段声明的数据类型是什么。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段 只能存储64位整数, 当向这种字段保存除整数以外的数据时,将 会产生错误。
按钮write.setOnClickListener() 调用write()进行数据存储。 writeText 按钮read.setOnClickListener() 调用read()完成文件读取。 (write) readText (read) 显示从文件 读取的内容
用于输入 向文件写 入数据
www.themegallery.com
www.themegallery.com
注意事项
注意:
程序中raf.seek(destFile.length())用于将文件的指针 定位到文件的末尾,从而实现将新内容附加到文件的目
的。如果没有这句代码,多次向文件中写入内容时,后
写的内容会替换前面的内容。读取操作时,采用的是简 单的文件输入输出流,每次都是读取整个文件内容。
数据存储
概述
ContentProvider
获取网络资源
WebView控 件显示网页
www.themegallery.com
主要内容
Sharedpreferences 文件操作
数据 存取
ContentProvider
SQLite 网络
www.themegallery.com
手机上文件存取
Diagram
www.themegallery.com
SD卡文件存取
使用openFileOutput()方法保存文件,文件是存放在手机上, 一般手机的存储空间不是很大,存放些小文件还行,如果要存 放视频类的大文件,则不行。对于像视频这样的大文件,可以 把它存放在SDCard上。 SDCard是什么?可以把它看作是移动 硬盘或U盘。 在模拟器中使用SDCard,需要先创建一张SDCard卡(只是 镜像文件)。SDCard可以在Eclipse创建模拟器时随同创建,也 可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以 下命令创建一张容量为2G的SDCard,文件后缀名可以自取,建 议使用.img: mksdcard 2048M E:\sdcard.img
2、调用Environment的getExternalStorageDirectory()方法来
获取外部存储器,也就是SD卡的目录。 3、使用FileInputStream、FileOutputStream、FileReader、
FileWriter读、写SD卡里的文件。
www.themegallery.com
Baidu Nhomakorabea
SD卡文件存取
注意:
文件读取之前,应确认手机上已插入SD卡,对于模拟器来说, 可以通过mksdcard命令来创建虚拟存储卡; 为了读、写SD卡上的数据,必须在应用程序的清单文件 (AndroidManifest.xml)中添加读、写SD卡的权限。
<!-- 在SDCard中创建与删除文件权限 -->
www.themegallery.com
SQLite数据库相关类
SharedPreferences接口本身并没有提供写入数据的能力,而是通过
SharedPreferences的内部接口Editor,SharedPreferences调用edit()方法即 可获取它对应的Editor对象。 Shared Preferences本身是一个接口,不能直接实例化,只能通过
www.themegallery.com
案例
该程序实现保存用户登录信息的功能,用户第一次登录时可设 置是否记录密码和是否自动登录。如果用户勾选记住密码复选框, 则下次登录时,会直接显示用户名和密码,用户只需单击登录即 可。【示例代码:codes\07\SaveLoginInfo 】
www.themegallery.com
Context提供了如 下两个方法来打 开本应用程序的 数据文件夹里的 文件IO流。
第一参数用于指定文件名称,不能包含路径分隔符“/” ,如 果文件不存在,Android 会自动创建它。 第二参数用于指定操作模式,有四种模式。
www.themegallery.com
四种操作模式
Context.MODE_PRIVATE=0:为默认操作模式,代表该 文件是私有数据,只能被应用本身访问,在该模式下,写入 的内容会覆盖原文件的内容,如果想把新写入的内容追加到 原文件中,可以使用Context.MODE_APPEND 。 Context.MODE_APPEND=32768:模式会检查文件是否 存在,存在就往文件追加内容,否则就创建新文件; Context.MODE_WORLD_READABLE =1:表示当前文 件可以被其他应用读取; Context.MODE_WORLD_WRITEABLE =2:表示当前文 件可以被其他应用写入。
<uses-permission android:name=”android:permission.MOUNT_UNMOUNT_FILESYSTEMS”/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name=”android:permission.WRITE_EXTERNAL_STORAGE”/>
www.themegallery.com
案例
单击write按钮,将第一个文本编辑框(writeText)的内容写 入到指定的文件中(content.txt),单击read按钮, 从指定的 文件中(content.txt)读取数据并显示在第二个文本框(readText) 上。【示例代码:codes\07\FileTest】
第七章 Android中的数据存储
倚动软件工厂实验室
主要内容
手机文件存取
文件存储
SD卡文件存取 访问本应用 SharedPreferences
SharedPreferences
访问其他应用 SharedPreferences SQLite概述 SQLiteOpenHelper
SQLite数据库
相关类库 SQLiteDatabase 备忘录示例 Uri UriMatcher 相关类库 ContentUris ContentResolver ContentValues 应用示例 通过URL访 问网络资源 访问系统联系人数据 共享备忘录数据
Context提供的getSharedpreferences(String name, int mode)方法来获取
SharedPreferences实例。 SharedPreferences数据总是保存在 /data/data/<package_name>/shared_prefs目录下, SharedPreferences数据总是以XML格式保存。
读写其它应用SharedPreferences
要读写其它应用的SharedPreferences,前提是创建该 SharedPreferences的应用程序指定了相应的访问权限。 主要步骤如下: 1、需要创建其他程序对应的Context。(Android系统是根据 应用程序的包名来作为该程序的标识的) 2、调用其他应用程序的Context的getSharedPreferences (String name, int mode)即可获取相应的SharedPreferences对 象; 3、如果需要向其他应用的SharedPreferences数据写入数据, 调用SharedPreferences的edit()方法获取相应的Editor即可。 注意:前提是创建该SharedPreferences的应用程序指定了 相应的访问权限。
www.themegallery.com
SD卡文件存取
应用程序的数据文件保存在/mnt/sdcard目录下。
www.themegallery.com
SharedPreferences
SharedPreferences是一个接口,应用程序使用该接口可以快速而高效的 以键值对的形式保存数据,非常类似于Bundle。信息以XML文件的形式存储 在android设备上。
注意
在data/data文件夹下生成的目录结构如下:
文本
文本
login.xml文件的内容
<map>
<string name="psd">123456</string> <boolean name="isSavePsd" value="true" /> <string 文本 name="name">zhangsan</string> <boolean name="isAutoLogin" value="false" /> </map>
www.themegallery.com
SQLite数据库存储数据
查询语句:select * from 表名 where 条件子句 group by 分组字 句 having ... order by 排序子句 如:select * from person 分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3 条记录 select * from Account limit 5 offset 3 插入语句:insert into 表名(字段列表) values(值列表)。 如: insert into person(name, age) values(‘传智’,3) 更新语句:update 表名 set 字段名=值 where 条件子句。 如:update person set name=‘传智‘ where id=10 删除语句:delete from 表名 where 条件子句。 如:delete from person where id=10
www.themegallery.com
注意
如果希望文件被其他应用读和写,可以传入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE
应用程序的数据文件默认保存在/data/data/ <package name>/files目录下,文件的后缀名随意。
问题与讨论
1、当我们手机上不存在该文件时,我们先写后读与先读 后写有区别吗?程序会不会出错? (具体做法:把手机上 的content.txt文件删除,然后分别进行先写后读与先读后写操 作,观察效果)。 2、不同操作模式的区别,当我们多次执行写入操作时, 文件里的内容是被覆盖还是不断的在文件末尾附加新数据? (具体做法:修改openFileOutput()方法的第二个参数)。
FileInputStream openFileInput(String name):打开应 用程序的数据文件夹下的name文件对 应输入流。 FileOutputStream openFileOutput(String name, int mode):打开应用程序的数据文件夹下 的name文件对应输出流。
www.themegallery.com
SD卡文件存取
读、写SD卡上的文件步骤如下:
1、调用Environment的getExternalStorageState()方法判断手机上是否插
入了SD卡,并且应用程序具有读写SD卡的权限。
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果 手机装有SDCard,并且可以进行读写,那么方法返回的状态等于 Environment.MEDIA_MOUNTED。
www.themegallery.com
SQLite数据库存储数据
在Android平台上,集成了一个嵌入式关系型数据库SQLite, SQLite支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串 文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但 实际上SQLite也接受varchar(n)可变、char(n)、 decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的 五种数据类型。 SQLite最大的特点是可以把各种类型的数据保存到任何字段 中,而不用关心字段声明的数据类型是什么。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段 只能存储64位整数, 当向这种字段保存除整数以外的数据时,将 会产生错误。
按钮write.setOnClickListener() 调用write()进行数据存储。 writeText 按钮read.setOnClickListener() 调用read()完成文件读取。 (write) readText (read) 显示从文件 读取的内容
用于输入 向文件写 入数据
www.themegallery.com
www.themegallery.com
注意事项
注意:
程序中raf.seek(destFile.length())用于将文件的指针 定位到文件的末尾,从而实现将新内容附加到文件的目
的。如果没有这句代码,多次向文件中写入内容时,后
写的内容会替换前面的内容。读取操作时,采用的是简 单的文件输入输出流,每次都是读取整个文件内容。
数据存储
概述
ContentProvider
获取网络资源
WebView控 件显示网页
www.themegallery.com
主要内容
Sharedpreferences 文件操作
数据 存取
ContentProvider
SQLite 网络
www.themegallery.com
手机上文件存取
Diagram
www.themegallery.com
SD卡文件存取
使用openFileOutput()方法保存文件,文件是存放在手机上, 一般手机的存储空间不是很大,存放些小文件还行,如果要存 放视频类的大文件,则不行。对于像视频这样的大文件,可以 把它存放在SDCard上。 SDCard是什么?可以把它看作是移动 硬盘或U盘。 在模拟器中使用SDCard,需要先创建一张SDCard卡(只是 镜像文件)。SDCard可以在Eclipse创建模拟器时随同创建,也 可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以 下命令创建一张容量为2G的SDCard,文件后缀名可以自取,建 议使用.img: mksdcard 2048M E:\sdcard.img
2、调用Environment的getExternalStorageDirectory()方法来
获取外部存储器,也就是SD卡的目录。 3、使用FileInputStream、FileOutputStream、FileReader、
FileWriter读、写SD卡里的文件。
www.themegallery.com
Baidu Nhomakorabea
SD卡文件存取
注意:
文件读取之前,应确认手机上已插入SD卡,对于模拟器来说, 可以通过mksdcard命令来创建虚拟存储卡; 为了读、写SD卡上的数据,必须在应用程序的清单文件 (AndroidManifest.xml)中添加读、写SD卡的权限。
<!-- 在SDCard中创建与删除文件权限 -->
www.themegallery.com
SQLite数据库相关类
SharedPreferences接口本身并没有提供写入数据的能力,而是通过
SharedPreferences的内部接口Editor,SharedPreferences调用edit()方法即 可获取它对应的Editor对象。 Shared Preferences本身是一个接口,不能直接实例化,只能通过
www.themegallery.com
案例
该程序实现保存用户登录信息的功能,用户第一次登录时可设 置是否记录密码和是否自动登录。如果用户勾选记住密码复选框, 则下次登录时,会直接显示用户名和密码,用户只需单击登录即 可。【示例代码:codes\07\SaveLoginInfo 】
www.themegallery.com
Context提供了如 下两个方法来打 开本应用程序的 数据文件夹里的 文件IO流。
第一参数用于指定文件名称,不能包含路径分隔符“/” ,如 果文件不存在,Android 会自动创建它。 第二参数用于指定操作模式,有四种模式。
www.themegallery.com
四种操作模式
Context.MODE_PRIVATE=0:为默认操作模式,代表该 文件是私有数据,只能被应用本身访问,在该模式下,写入 的内容会覆盖原文件的内容,如果想把新写入的内容追加到 原文件中,可以使用Context.MODE_APPEND 。 Context.MODE_APPEND=32768:模式会检查文件是否 存在,存在就往文件追加内容,否则就创建新文件; Context.MODE_WORLD_READABLE =1:表示当前文 件可以被其他应用读取; Context.MODE_WORLD_WRITEABLE =2:表示当前文 件可以被其他应用写入。
<uses-permission android:name=”android:permission.MOUNT_UNMOUNT_FILESYSTEMS”/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name=”android:permission.WRITE_EXTERNAL_STORAGE”/>
www.themegallery.com
案例
单击write按钮,将第一个文本编辑框(writeText)的内容写 入到指定的文件中(content.txt),单击read按钮, 从指定的 文件中(content.txt)读取数据并显示在第二个文本框(readText) 上。【示例代码:codes\07\FileTest】
第七章 Android中的数据存储
倚动软件工厂实验室
主要内容
手机文件存取
文件存储
SD卡文件存取 访问本应用 SharedPreferences
SharedPreferences
访问其他应用 SharedPreferences SQLite概述 SQLiteOpenHelper
SQLite数据库
相关类库 SQLiteDatabase 备忘录示例 Uri UriMatcher 相关类库 ContentUris ContentResolver ContentValues 应用示例 通过URL访 问网络资源 访问系统联系人数据 共享备忘录数据
Context提供的getSharedpreferences(String name, int mode)方法来获取
SharedPreferences实例。 SharedPreferences数据总是保存在 /data/data/<package_name>/shared_prefs目录下, SharedPreferences数据总是以XML格式保存。