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

上传人:sh****n 文档编号:12583425 上传时间:2020-05-12 格式:PPT 页数:37 大小:388.50KB
返回 下载 相关 举报
《数据存储与共享》PPT课件.ppt_第1页
第1页 / 共37页
《数据存储与共享》PPT课件.ppt_第2页
第2页 / 共37页
《数据存储与共享》PPT课件.ppt_第3页
第3页 / 共37页
点击查看更多>>
资源描述
数据存储与共享,onandroid,本章内容,首选项信息私有数据存储公有数据存储与共享数据文件内存数据文件SD卡数据文件SQLite数据库SQLite基本操作SQLiteOpenHelperContentProvider使用ContentProvider发布数据使用ContentResolver获取数据,数据存取方式,首选项信息Preference键-值方式存储,以xml文件的形式保存数据文件File采用java.io.*库所提供I/O接口读写文件数据库SQLiteSQLite是轻量级的嵌入式数据库引擎ContentProvider用于实现不同应用程序之间的数据共享(系统),首选项信息,什么是首选项?可定制的设置选项或菜单程序的界面风格、操作习惯、常用列表等数据信息首选项键值对形式存储XML文件应用程序中可以通过指定不同的XML文件名来创建多个首选项信息数据文件SharedPreferences类,首选项信息,首选项信息的保护和公开模式MODE_PRIVATE:私有模式MODE_WORLD_READABLE:全局可读模式MODE_WORLD_WRITEABLE:全局可写模式(无效),首选项信息:私有数据存储,SharedPreferences获取publicSharedPreferencesgetSharedPreferences(Stringname,intmode)例:SharedPreferencessp=getSharedPreferences(myShare,MODE_PRIVATE);,首选项信息:私有数据存储,SharedPreferences提供的方法booleangetBoolean(Stringkey,booleandefValue)floatgetFloat(Stringkey,floatdefValue)intgetInt(Stringkey,intdefValue)longgetLong(Stringkey,longdefValue)StringgetString(Stringkey,StringdefValue),首选项信息:私有数据存储,SharedPreferences.EditorSharedPreferences对象只提供读取数据的方法,不能进行数据的存储和修改操作。这些操作需要通过SharedPreferences类的嵌套类SharedPreferences.Editor类所提供的方法来实现SharedPreferences.Editor获取Editoreditor=sp.edit();,首选项信息:私有数据存储,SharedPreferences.Editor提供的方法putBoolean(Stringkey,booleanvalue)putFloat(Stringkey,floatvalue)putInt(Stringkey,intvalue)putLong(Stringkey,longvalue)putString(Stringkey,Stringvalue)remove(Stringkey)commit()contains(Stringkey),首选项信息:公有数据存储与共享,实现过程应用1创建首选项模式为:MODE_WORLD_READABLEMODE_WORLD_WRITEABLE应用2获取上下文环境(共享首选项在包内)Contextcontext=createPackageContext(com.example.sp,Context.CONTEXT_IGNORE_SECURITY);SharedPreferencessp=context.getSharedPreferences(SPShare,MODE_WORLD_READABLE);.,首选项信息:实例,实例数据位于手机目录下:/data/data/shared_prefs,数据文件,数据文件特点首选项信息只能以键值对的形式保存特定格式数据FileInputStreamFileOutputStreamopenFileInput()openFileOutput(),数据文件,Context类提供方法FileInputStreamopenFileInput(Stringname)throwsFileNotFoundExceptionFileOutputStreamopenFileOutput(Stringname,intmode)throwsFileNotFoundExceptionmode为文件操作模式,值为整数类型的常量: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),FilesdCardDir=Environment.getExternalStorageDirectory();,SQLite数据库,SQLite概述SQLite是一种轻量级的基于文件的数据库管理系统由C语言编写,实现了标准SQL中的CRUD操作SQLite小巧、高效,适用于手机等嵌入式设备中SQLite内部支持以下几种数据类型:NULL:空值INTEGER:有符号整数REAL:浮点数TEXT:文本字符串BLOB:二进制字节数据,SQLite数据库,SQLiteDatabase方法publicstaticSQLiteDatabaseopenOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)打开/创建数据库,参数一为数据库文件路径,参数二可为nullpublicvoidexecSQL(Stringsql)publicCursorrawQuery(Stringsql,StringselectionArgs)booleanmoveToNext()/moveToPrevious()/moveToFirst()booleanisFirst()/isLast()intgetCount()intgetXXX(intcolumnIndex),SQLite数据库,SQLite基本操作实例数据库文件保存在目录/data/data/files/stu.db3实例:SQLite1(带provider发布数据),SQLite数据库,SQLiteOpenHelper提供方法辅助创建和打开数据库,管理数据库不同版本使用时需要创建一个类,继承类SQLiteOpenHelper重写其相对应的方法来实现创建、打开、更新数据库的操作常用方法如下voidonCreate(SQLiteDatabasedb)voidonOpen(SQLiteDatabasedb)voidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)SQLiteDatabasegetWritableDatabase()SQLiteDatabasegetReadableDatabase(),SQLite数据库,SQLiteOpenHelperMVC思想使用分层思想设计数据模块实例:SQLite2SQLite,ContentProvider,概念跨应用程序数据共享的方式应用可通过ContentProvider发布数据,但不会泄露数据在其应用程序内部的组织和存储方式其他应用可通过ContentResolver来获取某个应用发布出来的共享数据通信录、通话记录、短信记录、相片库、铃声库等系统应用程序也是通过ContentProvider来共享自己的数据,ContentProvider,uri是ContentProvider提供的访问数据的标签A:标准前缀,用来说明这是一个ContentProvider控制的数据B:URI的标识,该标识定义了这是哪个ContentProvider提供的数据C:路径,URI中可能不包括路径,也可能包括一个或多个D:需要获取的记录的ID;如果没有该ID,就表示返回全部数据content:/com.example.sqlite1.StuProvider,ContentProvider,使用ContentProvider发布数据ContentProvider提供的数据以类似于数据库表的二维结构来组织。每一行表示一条记录,每一行包含若干列。通过调用类ContentProvider提供的方法,其他应用程序可以对提供的数据进行查询、更新、插入、删除等操作从类ContentProvider派生出一个子类,即自定义一个ContentProvider,并根据需要重写其中的方法在AndroidManifest.xml中注册这个自定义的ContentProvider,ContentProvider,自定义ContentProvider需重写的主要方法booleanonCreate()Cursorquery(Uriuri,Stringprojection,Stringselection,StringselectionArgs,StringsortOrder)intupdate(Uriuri,ContentValuesvalues,Stringselection,StringselectionArgs)Uriinsert(Uriuri,ContentValuesvalues)intdelete(Uriuri,Stringselection,StringselectionArgs)StringgetType(Uriuri),ContentProvider,使用ContentResolver获取数据通过类Context的getContentResolver()方法可以获得一个类ContentResolver的实例类ContentResolver的常用方法有:Cursorquery(Uriuri,Stringprojection,Stringselection,StringselectionArgs,StringsortOrder)intupdate(Uriuri,ContentValuesvalues,Stringwhere,StringselectionArgs)Uriinsert(Uriurl,ContentValuesvalues)intdelete(Uriurl,Stringwhere,StringselectionArgs),ContentProvider,在例SQLite1中创建类StuProvider(已建)只介绍向其他应用程序提供查询的ContentProvider接口,其他可自行完成,publicclassStuProviderextendsContentProviderSQLiteDatabasedb;.publicbooleanonCreate()trydb=SQLiteDatabase.openOrCreateDatabase(this.getContext().getFilesDir().toString()+/stu.db3,null);catch(Exceptione)returnfalse;returntrue;publicCursorquery(Uriuri,Stringprojection,Stringselection,StringselectionArgs,StringsortOrder)Cursorcursor=db.rawQuery(select*fromstudent,null);returncursor;,ContentProvider,在上例工程的AndroidManifest.xml文件中添加标记,注册定义的StuProvider定义后URI为content:/com.example.sqlite1.StuProvider,.,ContentProvider,在本例工程的主Activity中获取应用发布的数据,ContentResolverresolver=getContentResolver();Uriuri=Uri.parse(content:/com.example.sqlite1.StuProvider);Cursorcursor=resolver.query(uri,null,null,null,null);while(true)if(cursor.moveToNext()=false)break;Stringi=cursor.getString(0);Stringn=cursor.getString(1);ints=cursor.getInt(2);Stringtmp=list.getText().toString();list.setText(tmp+n+i+n+s);,ContentProvider,实例:ReadContent,ContentProvider,使用Activity.managedQuery()获取数据获取一个包含指定数据的Cursor对象,并由Activity来接管这个Cursor的生命周期。首先该函数通过调用getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder)获取一个包含指定数据的Cursor对象然后通过调用startManagingCursor(c)实现由Activity来接管返回的Cursorc的生命周期,ContentProvider,在本例工程的主Activity中获取系统发布的数据,privatestaticfinalStringCOLUMNS=Contacts.DISPLAY_NAME,Phone.NUMBER;Cursorcursor=this.managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,COLUMNS,null,null,null);intidIndex=cursor.getColumnIndex(COLUMNS0);intnumIndex=cursor.getColumnIndex(COLUMNS1);ArrayListlist=newArrayList();while(cursor.moveToNext()Stringname=cursor.getString(idIndex);Stringnum=cursor.getString(numIndex);list.add(name+num);,ContentProvider,添加权限声明实例:ContentProvider,作业,P1646,thanks,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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