数据存储和访问.ppt
《数据存储和访问.ppt》由会员分享,可在线阅读,更多相关《数据存储和访问.ppt(158页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第8章章 数据存储和访问数据存储和访问本章学习目标:n掌握SharedPreferences的使用方法n掌握各种文件存储的区别与适用情况n了解SQLite数据库的特点和体系结构n掌握SQLite数据库的建立和操作方法n理解ContentProvider的用途和原理n掌握ContentProvider的创建与使用方法8.1 简单存储 n8.1.1 SharedPreferencesqSharedPreferences是一种轻量级的数据保存方式q通过SharedPreferences可以将NVP(Name/Value Pair,名称/值对)保存在Android的文件系统中,而且SharedPre
2、ferences完全屏蔽的对文件系统的操作过程q开发人员仅是通过调用SharedPreferences对NVP进行保存和读取8.1 简单存储 n8.1.1 SharedPreferencesqSharedPreferences不仅能够保存数据,还能够实现不同应用程序间的数据共享qSharedPreferences支持三种访问模式n私有(MODE_PRIVATE):仅有创建程序有权限对其进行读取或写入n全局读(MODE_WORLD_READABLE):不仅创建程序可以对其进行读取或写入,其他应用程序也读取操作的权限,但没有写入操作的权限n全局写(MODE_WORLD_WRITEABLE):创建程
3、序和其他程序都可以对其进行写入操作,但没有读取的权限8.1 简单存储 n8.1.1 SharedPreferencesq在使用SharedPreferences前,先定义SharedPreferences的访问模式q下面的代码将访问模式定义为私有模式q有的时候需要将SharedPreferences的访问模式设定为即可以全局读,也可以全局写,这样就需要将两种模式写成下面的方式public static int MODE=MODE_PRIVATE;public static int MODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITE
4、ABLE;8.1 简单存储 n8.1.1 SharedPreferencesq定义SharedPreferences的名称,这个名称与在Android文件系统中保存的文件同名。因此,只要具有相同的SharedPreferences名称的NVP内容,都会保存在同一个文件中q为了可以使用SharedPreferences,需要将访问模式和SharedPreferences名称作为参数,传递到getSharedPreferences()函数,并获取到SharedPreferences对象public static final String PREFERENCE_NAME=SaveSetting;Sh
5、aredPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);8.1 简单存储 n8.1.1 SharedPreferencesq在获取到SharedPreferences对象后,则可以通过SharedPreferences.Editor类对SharedPreferences进行修改,最后调用commit()函数保存修改内容qSharedPreferences广泛支持各种基本数据类型,包括整型、布尔型、浮点型和长型等等1.SharedPreferences.Editor editor=sharedPre
6、ferences.edit();2.editor.putString(Name,Tom);3.editor.putInt(Age,20);4.editor.putFloat(Height,);mit();8.1 简单存储 n8.1.1 SharedPreferencesq如果需要从已经保存的SharedPreferences中读取数据,同样是调用getSharedPreferences()函数,并在函数的第1个参数中指明需要访问的SharedPreferences名称,最后通过get()函数获取保存在SharedPreferences中的NVPqget()函数的第1个参数是NVP的名称q第2个
7、参数是在无法获取到数值的时候使用的缺省值1.SharedPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);2.String name=sharedPreferences.getString(Name,Default Name);3.int age=sharedPreferences.getInt(Age,20);4.float height=sharedPreferences.getFloat(Height,);8.1 简单存储 n8.1.2 示例q通过SimplePreferenceDemo示例介
8、绍具体说明SharedPreferences的文件保存位置和保存格式q下图是SimplePreferenceDemo示例的用户界面n用户在界面上的输入的信息,将通过SharedPreferences在Activity关闭时进行保存。当应用程序重新开启时,保存在SharedPreferences的信息将被读取出来,并重新呈现在用户界面上8.1 简单存储n8.1.2 示例qSimplePreferenceDemo示例运行后,通过FileExplorer查看/data/data下的数据,Android为每个应用程序建立了与包同名的目录,用来保存应用程序产生的数据,这些数据包括文件、SharedPre
9、ferences文件和数据库等qSharedPreferences文件就保存在/data/data/shared_prefs目录下8.1 简单存储n8.1.2 示例q在本示例中,shared_prefs目录下生成了一个名为SaveSetting.xml的文件q这个文件就是保存SharedPreferences的文件,文件大小为170字节,在Linux下的权限为“-rw-rw-rw”8.1 简单存储n8.1.2 示例q在Linux系统中,文件权限分别描述了创建者、同组用户和其他用户对文件的操作限制。x表示可执行,r表示可读,w表示可写,d表示目录,-表示普通文件。因此,“-rw-rw-rw”表示
10、SaveSetting.xml可以被创建者、同组用户和其他用户进行读取和写入操作,但不可执行q产生这样的文件权限与程序人员设定的SharedPreferences的访问模式有关,“-rw-rw-rw”的权限是“全局读+全局写”的结果q如果将SharedPreferences的访问模式设置为私有,则文件权限将成为“-rw-rw-”,表示仅有创建者和同组用户具有读写文件的权限8.1 简单存储n8.1.2 示例qSaveSetting.xml文件是以XML格式保存的信息,内容如图如下1.2.3.4.Tom5.6.8.1 简单存储n8.1.2 示例qSimplePreferenceDemo示例在onS
11、tart()函数中调用loadSharedPreferences()函数,读取保存在SharedPreferences中的姓名、年龄和身高信息,并显示在用户界面上q当Activity关闭时,在onStop()函数调用saveSharedPreferences(),保存界面上的信息qSimplePreferenceDemo.java的完整代码1.package edu.hrbeu.SimplePreferenceDemo;2.3.import android.app.Activity;4.import android.content.Context;5.import android.conten
12、t.SharedPreferences;6.import android.os.Bundle;7.import android.widget.EditText;8.1 简单存储n8.1.2 示例8.9.public class SimplePreferenceDemo extends Activity 10.11.private EditText nameText;12.private EditText ageText;13.private EditText heightText;14.public static final String PREFERENCE_NAME=SaveSetting
13、;15.public static int MODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;16.17.Override18.public void onCreate(Bundle savedInstanceState)19.super.onCreate(savedInstanceState);20.setContentView(R.layout.main);21.nameText=(EditText)findViewById(R.id.name);22.ageText=(EditText)findViewById(R
14、.id.age);23.heightText=(EditText)findViewById(R.id.height);24.8.1 简单存储n8.1.2 示例25.26.Override27.public void onStart()28.super.onStart();29.loadSharedPreferences();30.31.Override32.public void onStop()33.super.onStop();34.saveSharedPreferences();35.36.37.private void loadSharedPreferences()38.SharedP
15、references sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);39.String name=sharedPreferences.getString(Name,Tom);40.int age=sharedPreferences.getInt(Age,20);41.float height=sharedPreferences.getFloat(Height,);8.1 简单存储n8.1.2 示例42.43.nameText.setText(name);44.ageText.setText(String.valueOf
16、(age);45.heightText.setText(String.valueOf(height);46.47.48.private void saveSharedPreferences()49.SharedPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);50.SharedPreferences.Editor editor=sharedPreferences.edit();51.52.editor.putString(Name,nameText.getText().toString();53.e
17、ditor.putInt(Age,Integer.parseInt(ageText.getText().toString();54.editor.putFloat(Height,Float.parseFloat(heightText.getText().toString();mit();56.57.8.1 简单存储n8.1.2 示例q示例SharePreferenceDemo将说明如何读取其他应用程序保存的SharedPreferences数据q下图是SharePreferenceDemo示例的用户界面q示例将读取SimplePreferenceDemo示例保存的信息,并在程序启动时显示在用户
18、界面上8.1 简单存储n8.1.2 示例q下面给出SharePreferenceDemo示例的核心代码1.public static final String PREFERENCE_PACKAGE=edu.hrbeu.SimplePreferenceDemo;2.public static final String PREFERENCE_NAME=SaveSetting;3.public static int MODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;4.5.public void onCreate(Bundle
19、 savedInstanceState)6.Context c=null;7.try 8.c=this.createPackageContext(PREFERENCE_PACKAGE,Context.CONTEXT_IGNORE_SECURITY);9.catch(NameNotFoundException e)10.e.printStackTrace();11.12.SharedPreferences sharedPreferences=c.getSharedPreferences(PREFERENCE_NAME,MODE);8.1 简单存储n8.1.2 示例n第8行代码调用了createP
20、ackageContext()获取到了SimplePreferenceDemo示例的Contextn第8行代码第1个参数是SimplePreferenceDemo的包名称,在代码第1行进行了定义n第2个参数Context.CONTEXT_IGNORE_SECURIT表示忽略所有可能产生的安全问题。这段代码可能引发异常,因此必须防止在try/catch中13.String name=sharedPreferences.getString(Name,Tom);14.int age=sharedPreferences.getInt(Age,20);15.float height=sharedPref
21、erences.getFloat(Height,);16.8.1 简单存储n8.1.2 示例n在代码第12行,通过Context得到了SimplePreferenceDemo示例的SharedPreferences对象,同样在getSharedPreferences()函数中,需要将正确的SharedPreferences名称传递给函数q访问其他应用程序的SharedPreferences必须满足三个条件n共享者需要将SharedPreferences的访问模式设置为全局读或全局写n访问者需要知道共享者的包名称和SharedPreferences的名称,以通过Context获得SharedPr
22、eferences对象n访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据8.2 文件存储nAndroid使用的是基于Linux的文件系统,程序开发人员可以建立和访问程序自身的私有文件,也可以访问保存在资源目录中的原始文件和XML文件,还可以在SD卡等外部存储设备中保存文件8.2 文件存储n8.2.1 内部存储q Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在Linux系统下的/data/data/files目录中qAndroid系统不仅支持标准Java的IO类和方法,还提供了能够简化读写流式文件过程的函数q主要介绍的两个函数nopenF
23、ileOutput()nopenFileInput()8.2 文件存储n8.2.1 内部存储qopenFileOutput()函数nopenFileOutput()函数为写入数据做准备而打开的应用程序私文件,如果指定的文件不存在,则创建一个新的文件nopenFileOutput()函数的语法格式如下q第1个参数是文件名称,这个参数不可以包含描述路径的斜杠q第2个参数是操作模式n函数的返回值是FileOutputStream类型public FileOutputStream openFileOutput(String name,int mode)8.2 文件存储n8.2.1 内部存储qopenF
24、ileOutput()函数nAndroid系统支持四种文件操作模式模式模式说明说明MODE_PRIVATE私有模式,缺陷模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问。MODE_APPEND追加模式,如果文件已经存在,则在文件的结尾处添加新数据。MODE_WORLD_READABLE全局读模式,允许任何程序读取私有文件。MODE_WORLD_WRITEABLE全局写模式,允许任何程序写入私有文件。8.2 文件存储n8.2.1 内部存储qopenFileOutput()函数n使用openFileOutput()函数建立新文件的示例代码如下q第1行代码定义了建立文件的名称fileD
25、emo.txtq第2行代码使用openFileOutput()函数以私有模式建立文件q第4行代码调用write()函数将数据写入文件q第5行代码调用flush()函数将所有剩余的数据写入文件q第6行代码调用close()函数关闭FileOutputStream1.String FILE_NAME=fileDemo.txt;2.FileOutputStream fos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE)3.String text=“Some data”;4.fos.write(text.getBytes();5.fos.flush();6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 存储 访问
限制150内