《数据存储与共享》PPT课件.ppt

上传人:xin****828 文档编号:15594807 上传时间:2020-08-22 格式:PPT 页数:37 大小:388.50KB
返回 下载 相关 举报
《数据存储与共享》PPT课件.ppt_第1页
第1页 / 共37页
《数据存储与共享》PPT课件.ppt_第2页
第2页 / 共37页
《数据存储与共享》PPT课件.ppt_第3页
第3页 / 共37页
点击查看更多>>
资源描述
数据存储与共享,on android,本章内容,首选项信息 私有数据存储 公有数据存储与共享 数据文件 内存数据文件 SD卡数据文件 SQLite数据库 SQLite基本操作 SQLiteOpenHelper Content Provider 使用Content Provider发布数据 使用Content Resolver获取数据,数据存取方式,首选项信息Preference 键-值方式存储,以xml文件的形式保存 数据文件File 采用java.io.*库所提供I/O接口读写文件 数据库SQLite SQLite是轻量级的嵌入式数据库引擎 Content Provider 用于实现不同应用程序之间的数据共享(系统),首选项信息,什么是首选项? 可定制的设置选项或菜单 程序的界面风格、操作习惯、常用列表等数据信息 首选项键值对形式存储 XML文件 应用程序中可以通过指定不同的XML文件名来创建多个首选项信息数据文件 SharedPreferences类,首选项信息,首选项信息的保护和公开模式 MODE_PRIVATE:私有模式 MODE_WORLD_READABLE:全局可读模式 MODE_WORLD_WRITEABLE:全局可写模式(无效),首选项信息:私有数据存储,SharedPreferences获取 public SharedPreferences getSharedPreferences(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 defValue) String getString(String key, String defValue),首选项信息:私有数据存储,SharedPreferences.Editor SharedPreferences对象只提供读取数据的方法,不能进行数据的存储和修改操作。这些操作需要通过SharedPreferences类的嵌套类SharedPreferences.Editor类所提供的方法来实现 SharedPreferences.Editor获取 Editor editor=sp.edit();,首选项信息:私有数据存储,SharedPreferences.Editor提供的方法 putBoolean(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获取上下文环境(共享首选项在包内) Context context = createPackageContext(com.example.sp, Context.CONTEXT_IGNORE_ SECURITY); SharedPreferences sp = context.getSharedPreferences(SPShare, MODE_WORLD_READABLE); .,首选项信息:实例,实例 数据位于手机目录下:/data/data/shared_prefs,数据文件,数据文件特点 首选项信息只能以键值对的形式 保存特定格式数据 FileInputStream FileOutputStream 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_WORLD_WRITEABLE:全局只写模式 MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE:全局读写模式,数据文件,Context类提供方法 deleteFile():删除文件 getDir():创建/获取一个文件目录 fileList():列出本应用程序创建的所有文件 getFileDir():获取已创建文件的路径,数据文件:内存数据文件,内存数据文件特点 存放少量数据 应用程序卸载时其内存中所关联的数据文件也被删除 由程序创建的数据文件通常被保存在/data/data/files目录下,数据文件:内存数据文件,实例,数据文件:SD卡数据文件,SD卡数据文件特点 大量数据 在程序中编写检查SD卡是否可用的程序 需申明对SD卡(外部存储空间)的使用权限, ,数据文件:SD卡数据文件,SD卡数据文件常用操作 判断SD是否存在 获得SD卡路径 例,Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED),File sdCardDir = Environment.getExternalStorageDirectory();,SQLite数据库,SQLite概述 SQLite是一种轻量级的基于文件的数据库管理系统 由C语言编写,实现了标准SQL中的CRUD操作 SQLite小巧、高效,适用于手机等嵌入式设备中 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 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 提供方法辅助创建和打开数据库,管理数据库不同版本 使用时需要创建一个类,继承类SQLiteOpenHelper 重写其相对应的方法来实现创建、打开、更新数据库的操作 常用方法如下 void onCreate(SQLiteDatabase db) void onOpen(SQLiteDatabase db) void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) SQLiteDatabase getWritableDatabase() SQLiteDatabase getReadableDatabase(),SQLite数据库,SQLiteOpenHelper MVC思想 使用分层思想设计数据模块 实例: SQLite2 SQLite,Content Provider,概念 跨应用程序数据共享的方式 应用可通过Content Provider发布数据,但不会泄露数据在其应用程序内部的组织和存储方式 其他应用可通过Content Resolver来获取某个应用发布出来的共享数据 通信录、通话记录、短信记录、相片库、铃声库等系统应用程序也是通过Content Provider来共享自己的数据,Content Provider,uri是Content Provider提供的访问数据的标签 A:标准前缀,用来说明这是一个Content Provider控制的数据 B:URI的标识,该标识定义了这是哪个Content Provider提供的数据 C:路径,URI中可能不包括路径,也可能包括一个或多个 D:需要获取的记录的ID;如果没有该ID,就表示返回全部数据 content:/com.example.sqlite1.StuProvider,Content Provider,使用Content Provider发布数据 Content Provider提供的数据以类似于数据库表的二维结构来组织。每一行表示一条记录,每一行包含若干列。通过调用类ContentProvider提供的方法,其他应用程序可以对提供的数据进行查询、更新、插入、删除等操作 从类ContentProvider派生出一个子类,即自定义一个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 values, 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 query(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中创建类StuProvider(已建) 只介绍向其他应用程序提供查询的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; 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, . . ,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); 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().query(uri, projection, selection, selectionArgs, sortOrder) 获取一个包含指定数据的Cursor对象 然后通过调用startManagingCursor(c)实现由 Activity来接管返回的Cursor c的生命周期,Content Provider,在本例工程的主Activity中获取系统发布的数据,private static final String COLUMNS = Contacts.DISPLAY_NAME, Phone.NUMBER ; Cursor cursor = this.managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, COLUMNS, null, null, null); int idIndex = cursor.getColumnIndex(COLUMNS0); int numIndex = cursor.getColumnIndex(COLUMNS1); ArrayList list = new ArrayList(); while (cursor.moveToNext() String name = cursor.getString(idIndex); String num = cursor.getString(numIndex); list.add(name + + num); ,Content Provider,添加权限声明 实例:ContentProvider,作业,P164 6,thanks,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!