《数据存储与共享》PPT课件.ppt_第1页
《数据存储与共享》PPT课件.ppt_第2页
《数据存储与共享》PPT课件.ppt_第3页
《数据存储与共享》PPT课件.ppt_第4页
《数据存储与共享》PPT课件.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据存储与共享,on android,本章内容,首选项信息 私有数据存储 公有数据存储与共享 数据文件 内存数据文件 SD卡数据文件 SQLite数据库 SQLite基本操作 SQLiteOpenHelper Content Provider 使用Content Provider发布数据 使用Content Resolver获取数据,数据存取方式,首选项信息Preference 键-值方式存储,以xml文件的形式保存 数据文件File 采用java.io.*库所提供I/O接口读写文件 数据库SQLite SQLite是轻量级的嵌入式数据库引擎 Content Provider 用于实现不同应用

2、程序之间的数据共享(系统),首选项信息,什么是首选项? 可定制的设置选项或菜单 程序的界面风格、操作习惯、常用列表等数据信息 首选项键值对形式存储 XML文件 应用程序中可以通过指定不同的XML文件名来创建多个首选项信息数据文件 SharedPreferences类,首选项信息,首选项信息的保护和公开模式 MODE_PRIVATE:私有模式 MODE_WORLD_READABLE:全局可读模式 MODE_WORLD_WRITEABLE:全局可写模式(无效),首选项信息:私有数据存储,SharedPreferences获取 public SharedPreferences getSharedPr

3、eferences(String name, int mode) 例: SharedPreferences sp= getSharedPreferences(myShare, MODE_PRIVATE);,首选项信息:私有数据存储,SharedPreferences提供的方法 boolean getBoolean(String key, boolean defValue) float getFloat(String key, float defValue) int getInt(String key, int defValue) long getLong(String key, long de

4、fValue) String getString(String key, String defValue),首选项信息:私有数据存储,SharedPreferences.Editor SharedPreferences对象只提供读取数据的方法,不能进行数据的存储和修改操作。这些操作需要通过SharedPreferences类的嵌套类SharedPreferences.Editor类所提供的方法来实现 SharedPreferences.Editor获取 Editor editor=sp.edit();,首选项信息:私有数据存储,SharedPreferences.Editor提供的方法 put

5、Boolean(String key, boolean value) putFloat(String key, float value) putInt(String key, int value) putLong(String key, long value) putString(String key, String value) remove(String key) commit() contains(String key),首选项信息:公有数据存储与共享,实现过程 应用1创建首选项模式为: MODE_WORLD_READABLE MODE_WORLD_WRITEABLE 应用2获取上下文环

6、境(共享首选项在包内) Context context = createPackageContext(com.example.sp, Context.CONTEXT_IGNORE_ SECURITY); SharedPreferences sp = context.getSharedPreferences(SPShare, MODE_WORLD_READABLE); .,首选项信息:实例,实例 数据位于手机目录下:/data/data/shared_prefs,数据文件,数据文件特点 首选项信息只能以键值对的形式 保存特定格式数据 FileInputStream FileOutputStrea

7、m openFileInput() openFileOutput(),数据文件,Context类提供方法 FileInputStream openFileInput(String name) throws FileNotFoundException FileOutputStream openFileOutput(String name,int mode) throws FileNotFoundException mode为文件操作模式,值为整数类型的常量: MODE_PRIVATE:默认输出模式 MODE_APPEND:追加模式 MODE_WORLD_READABLE:全局只读模式 MODE_

8、WORLD_WRITEABLE:全局只写模式 MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE:全局读写模式,数据文件,Context类提供方法 deleteFile():删除文件 getDir():创建/获取一个文件目录 fileList():列出本应用程序创建的所有文件 getFileDir():获取已创建文件的路径,数据文件:内存数据文件,内存数据文件特点 存放少量数据 应用程序卸载时其内存中所关联的数据文件也被删除 由程序创建的数据文件通常被保存在/data/data/files目录下,数据文件:内存数据文件,实例,数据文件:SD卡数据文件,SD卡数据文

9、件特点 大量数据 在程序中编写检查SD卡是否可用的程序 需申明对SD卡(外部存储空间)的使用权限, ,数据文件:SD卡数据文件,SD卡数据文件常用操作 判断SD是否存在 获得SD卡路径 例,Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED),File sdCardDir = Environment.getExternalStorageDirectory();,SQLite数据库,SQLite概述 SQLite是一种轻量级的基于文件的数据库管理系统 由C语言编写,实现了标准SQL中的CRUD操作 SQLi

10、te小巧、高效,适用于手机等嵌入式设备中 SQLite内部支持以下几种数据类型: NULL:空值 INTEGER:有符号整数 REAL:浮点数 TEXT:文本字符串 BLOB:二进制字节数据,SQLite数据库,SQLiteDatabase方法 public static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) 打开/创建数据库,参数一为数据库文件路径,参数二可为null public void execSQL(String sql) public Cursor

11、 rawQuery(String sql, String selectionArgs) boolean moveToNext()/moveToPrevious()/moveToFirst() boolean isFirst()/isLast() int getCount() int getXXX(in tcolumnIndex),SQLite数据库,SQLite基本操作实例 数据库文件保存在目录 /data/data/files/stu.db3 实例:SQLite1(带provider发布数据),SQLite数据库,SQLiteOpenHelper 提供方法辅助创建和打开数据库,管理数据库不同

12、版本 使用时需要创建一个类,继承类SQLiteOpenHelper 重写其相对应的方法来实现创建、打开、更新数据库的操作 常用方法如下 void onCreate(SQLiteDatabase db) void onOpen(SQLiteDatabase db) void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) SQLiteDatabase getWritableDatabase() SQLiteDatabase getReadableDatabase(),SQLite数据库,SQLiteOpenHelper M

13、VC思想 使用分层思想设计数据模块 实例: SQLite2 SQLite,Content Provider,概念 跨应用程序数据共享的方式 应用可通过Content Provider发布数据,但不会泄露数据在其应用程序内部的组织和存储方式 其他应用可通过Content Resolver来获取某个应用发布出来的共享数据 通信录、通话记录、短信记录、相片库、铃声库等系统应用程序也是通过Content Provider来共享自己的数据,Content Provider,uri是Content Provider提供的访问数据的标签 A:标准前缀,用来说明这是一个Content Provider控制的数

14、据 B:URI的标识,该标识定义了这是哪个Content Provider提供的数据 C:路径,URI中可能不包括路径,也可能包括一个或多个 D:需要获取的记录的ID;如果没有该ID,就表示返回全部数据 content:/com.example.sqlite1.StuProvider,Content Provider,使用Content Provider发布数据 Content Provider提供的数据以类似于数据库表的二维结构来组织。每一行表示一条记录,每一行包含若干列。通过调用类ContentProvider提供的方法,其他应用程序可以对提供的数据进行查询、更新、插入、删除等操作 从类C

15、ontentProvider派生出一个子类,即自定义一个ContentProvider,并根据需要重写其中的方法 在AndroidManifest.xml中注册这个自定义的ContentProvider,Content Provider,自定义ContentProvider需重写的主要方法 boolean onCreate() Cursor query(Uri uri,String projection,String selection, String selectionArgs, String sortOrder) int update(Uri uri,ContentValues value

16、s, String selection,String selectionArgs) Uri insert(Uri uri, ContentValues values) int delete(Uri uri, String selection, String selectionArgs) String getType(Uri uri),Content Provider,使用Content Resolver获取数据 通过类Context的getContentResolver()方法可以获得一个类ContentResolver的实例 类ContentResolver的常用方法有: Cursor qu

17、ery(Uri uri,String projection,String selection,String selectionArgs, String sortOrder) int update(Uri uri, ContentValues values, String where, String selectionArgs) Uri insert(Uri url, ContentValues values) int delete(Uri url, String where, String selectionArgs),Content Provider,在例SQLite1中创建类StuProv

18、ider(已建) 只介绍向其他应用程序提供查询的ContentProvider接口,其他可自行完成,public class StuProvider extends ContentProvider SQLiteDatabase db; . public boolean onCreate() try db = SQLiteDatabase.openOrCreateDatabase( this.getContext().getFilesDir().toString() + /stu.db3, null); catch(Exception e) return false; return true;

19、public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) Cursor cursor = db.rawQuery(select * from student, null); return cursor; ,Content Provider,在上例工程的AndroidManifest.xml文件中添加标记,注册定义的StuProvider 定义后URI为 content:/com.example.sqlite1.StuProvider, . .

20、 ,Content Provider,在本例工程的主Activity中获取应用发布的数据,ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse(content:/com.example.sqlite1.StuProvider); Cursor cursor = resolver.query(uri, null, null, null, null); while(true) if(cursor.moveToNext() = false) break; String i = cursor.getString(0);

21、 String n = cursor.getString(1); int s = cursor.getInt(2); String tmp = list.getText().toString(); list.setText(tmp + n + i + + n + + s); ,Content Provider,实例:ReadContent,Content Provider,使用Activity.managedQuery()获取数据 获取一个包含指定数据的 Cursor 对象,并由 Activity 来接管这个 Cursor 的生命周期。 首先该函数通过调用 getContentResolver

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论