版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6Android数据存储6.1使用“Preference”保存简单数据6.2使用文件保存数据6.3使用数据库保存数据6.4ContendProvider6.1使用SharedPreferences存取简单键值对创建以键值<StringKey,StringValue>方式加入数据以StringKey为索引来取出数据清除SharedPreferencessettings =this.getSharedPreferences("Demo",MODE_PRIVATE);SharedPreferences.Editoreditor=settings.edit();editor.putString("name",“value”);mit();Stringstr=settings.getString("name","");editor.clear().commit();getSharedPreferences()根据指定名称获取SharedPreferences对象getPreferences()
获取唯一的perference文件存入XML后的内容目录:/data/data/<包>/shared_prefs/***.xml6.2文件存储文件用来存储大数量的数据采用java.io.*库所提供有I/O接口,读写文件。只有本地文件可以被访问优点:可以存储大容量的数据缺点:文件更新或是格式改变可能会导致巨大的编程工作JAVA文件流流(Stream)是什么?
流是访问字节序列的通道InputStream输入流:向流中写入字节OutputStream输出流:从流中读取字节文件流
输入流FileInputStream.read()输出流FileOutputStream.write()Android文件存储的路径内部存储空间应用程序私有的空间,其他应用程序不可见外部存储空间可以被所有应用程序访问的共享存储空间,通常是通过USB连接到设备后,可以被挂载到计算机的文件系统外部存储空间一般情况下是外挂的SD卡,也可以是在内部存储器上划分出来的一部分由于外部存储器可能被卸载,因此访问外部存储器时需首先判断外部存储器的状态是否可用文件相关API——内部存储getDir()//在内部存储空间上打开,创建目录getFilesDir()//获取文件在内部存储空间中的路径openFileInput(Stringname)//打开指定文件,读文件openFileOutput(Stringname,intmode)//打开或创建文件,写文件deleteFile(Stringname)//删除文件应用程序内部存储空间路径:/data/data/<package-name>/files文件相关API——外部存储getExternalFilesDir(Stringtype)//获取外部存储空间中可用的存储目录/mnt/sdcard/Android/data/<package-name>/files/typeEnvironment.getExternalStoragePublicDirectory
(String
type)//获取外部存储空间上指定类型的公共目录/mnt/sdcard/typeEnvironment.getExternalStorageState()//检查外部存储器状态是否可用文件操作(读)读文件Context.openFileInput(Stringname)打开一个与应用程序联系的私有文件输入流当文件不存在时抛出FileNotFoundException异常FileInputStreamin=this.openFileInput(“rt.txt");//打开文件“rt.txt"……in.close();//关闭输入流文件操作(写)写文件Context.openFileOutput(Stringname,intmode)开启一个与应用程序联系的私有文件输出流当文件不存在时该文件将被创建文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾FileOutputStreamout=this.openFileOutput(“wt.txt",MODE_APPEND);//打开文件“wt.txt"进行写操作、使用MODE_APPEND在添加模式中打开文件……out.close();//关闭输出流读取静态文件要打开打包在应用程序中的静态文件,使用Resources.openRawResource(R.raw.mydatafile)该文件必须放在文件夹res/raw/中InputStreamin=this.getResources().openRawResource(R.raw.my);… //获得Context资源in.close(); //关闭输入流设置缓存缓存用于保存应用程序运行时的临时数据系统磁盘空间低时,会优先清除缓存目录来回收磁盘空间
getCacheDir()
:返回应用程序可用的缓存目录路径SDCard读写要进行SDCard读写,必须先判断手机是否装有SDCard,并且可以进行读写if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //获取SDCard目录FilesdCardDir=Environment.getExternalStorageDirectory();FilesaveFile=newFile(sdCardDir,“itcast.txt”); FileOutputStreamoutStream=new FileOutputStream(saveFile); outStream.write("Android开发".getBytes()); outStream.close();ADB--AndroidDebugBridge
Client-Server------Device(Daemon)每个模拟器分配一对端口Emulator1,console:5554
Emulator1,adb:5555语法
adb[-d|-e|-s<serialNumber>]<command>ADB常用命令
install
<path-to-apk>上传APK文件,并安装pull
<remote>
<local>从设备/模拟器下载文件push
<local>
<remote>上传文件到设备/模拟器指定路径ADB常用命令
登陆ShellAdbshellshell
[shellCommand]使用sqlite3查看SQLite数据库状态:.database//查看数据库文件.tables.mode.output6.3数据库操作(SQLite)SQLite由RichardHipp博士在2000年开发,是目前应用最广泛的嵌入式数据库。提供结构化数据的持久化功能特点:免费占用空间小。150KB左右。无需安装或管理。作为一个C库实现,没有服务器,没有配置文件,一个数据库就是一个文件,可以随意移动。SQL基础什么是SQL?
结构化查询语言(StructuredQueryLanguage)基本的SQL语句类型数据定义:定义数据库,表结构//创建一个表
createtablenotes( idintegerprimarykey, titletext, ….)
SQL基础插入一条记录Insertintonotes更新一条记录
Updatenotessetcol_title=删除一条表记录
deletenoteswhere…查询表
select*fromnotes三步搞定SQLiteStep1,继承SQLiteOpenHelper类Public
classDBDataStoreextendsSQLiteOpenHelper{//首次尝试访问数据库,如果数据库不存在,会触发该调用public
voidonCreate(SQLiteDatabasedb){//TODOAuto-generatedmethodstubdb.execSQL(CREATE_TABLE);}@Override//当数据库版本变化时,触发此方法,可在这里处理数据库的各种升级变更public
voidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}}Step2插入,修改数据库表//通过getWritableDatabase获取可读写的数据库句柄SQLiteDatabasedb=getWritableDatabase();//构造SQL语句直接拼SQL字符串Stringsql="INSERTINTO"+TABLE_NAME+"VALUES("+note.getId()+","+note.getTitle()+","+note.getText()+","+note.getTimestamp()+");";//提交db.execSQL(sql);Step2插入,修改数据库表ContentValuesvalues=newContentValues();values.put(COL_ID,note.getId());values.put(COL_TITLE,note.getTitle());values.put(COL_TEXT,note.getText());values.put(COL_TIMESTAMP,note.getTimestamp());db.insertOrThrow(TABLE_NAME,null,values);Step3查询数据库//查询时,通过getReadableDatabase获取只读db句柄SQLiteDatabasedb=getReadableDatabase();//执行查询,返回结果集存放于Cursor对象
中Cursorc=db.query();//通过moveToNext遍历结果集while(c.moveToNext()){intid=c.getInt(c.getColumnIndexOrThrow(COL_ID));Stringtitle=c.getString(c.getColumnIndexOrThrow(COL_TITLE));}6.4ContentProvider提供了不同应用程序之间共享数据的一种机制,主要用于将自己的数据提供给其他程序访问为存储和读取数据提供了统一的接口提供了数据访问的权限控制,外部程序必须申请Provider要求的权限才能进行相应的操作访问ContentProvider使用ContentResolver对象作为Client去访问Provider mCursor=getContentResolver().query(
UserDictionary.Words.CONTENT_URI,
//TheURIofthewordstable
mProjection,
//Thecolumnstoreturnforeachrow
mSelectionClause
//Selectioncriteria
mSelectionArgs,
//Selectioncriteria
mSortOrder);
//ThesortorderforthereturnedrowsURI用于标示Provider中的数据资源举例content://contacts/people/contacts这个provider上people表的所有数据content://contacts/people/23创建ContentProvider实现ContentProvider
类,6个抽象方法:query(),in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论