您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > Android教程05-应用编程
Android课程讲义Android智能手机开发5、数据存取Android智能手机开发武汉大学GoogleAndroid联合实验室数据存取Android有四种方式:SharePreference轻量级键-值方式存储,以XML文件方式保存。文件采用java.io.*库所提供有I/O接口,读写文件。SQLit数据库SQLite是轻量级嵌入式内置数据库。ContentProviderContentProvider可为数据封装,为多个应用共享。武汉大学GoogleAndroid联合实验室1、SharedPreferences创建以键值StringKey,StringValue方式加入数据以StringKey为索引来取出数据清除SharedPreferencessettings=this.getSharedPreferences(Demo,MODE_PRIVATE);SharedPreferences.Editoreditor=settings.edit();editor.putString(name,“value”);editor.commit();Stringstr=settings.getString(name,);editor.clear().commit();XML文件名武汉大学GoogleAndroid联合实验室SharedPreferences存入XML后的内容目录:/data/data/<包>/shared_prefs/***.xmlXML文件名武汉大学GoogleAndroid联合实验室2、文件存取文件用来存储大数量的数据采用java.io.*库所提供有I/O接口,读写文件。只有本地文件可以被访问优点:可以存储大容量的数据缺点:文件更新或是格式改变可能会导致巨大的编程工作武汉大学GoogleAndroid联合实验室文件操作(读)读文件Context.openFileInput(Stringname)打开一个与应用程序联系的私有文件输入流当文件不存在时抛出FileNotFoundException异常FileInputStreamin=this.openFileInput(“rt.txt);//打开文件“rt.txt……in.close();//关闭输入流武汉大学GoogleAndroid联合实验室文件操作(写)写文件Context.openFileOutput(Stringname,intmode)开启一个与应用程序联系的私有文件输出流当文件不存在时该文件将被创建文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾FileOutputStreamout=this.openFileOutput(“wt.txt,MODE_APPEND);//打开文件“wt.txt进行写操作、使用MODE_APPEND在添加模式中打开文件……out.close();//关闭输出流武汉大学GoogleAndroid联合实验室读取静态文件要打开打包在应用程序中的静态文件,使用Resources.openRawResource(R.raw.mydatafile)该文件必须放在文件夹res/raw/中InputStreamin=this.getResources().openRawResource(R.raw.my);…//获得Context资源in.close();//关闭输入流武汉大学GoogleAndroid联合实验室把文件存放在SDCard访问SDCard,需要申请访问SDCard的权限。在AndroidManifest.xml中加入访问SDCard的权限如下:!--在SDCard中创建与删除文件权限--uses-permissionandroid:name=android.permission.MOUNT_UNMOUNT_FILESYSTEMS/!--往SDCard写入数据权限--uses-permissionandroid:name=android.permission.WRITE_EXTERNAL_STORAGE/武汉大学GoogleAndroid联合实验室SDCard读写要进行SDCard读写,必须先判断手机是否装有SDCard,并且可以进行读写。if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){FilesdCardDir=Environment.getExternalStorageDirectory();//获取SDCard目录FilesaveFile=newFile(sdCardDir,“itcast.txt”);FileOutputStreamoutStream=newFileOutputStream(saveFile);outStream.write(Android开发.getBytes());outStream.close();}武汉大学GoogleAndroid联合实验室3、SQLite数据库编程在某些情况下,文件不是有效的如果多线程数据访问是相关的如果应用程序处理可能变化的复杂数据结构等等内置SQLite数据库支持数据库对于创建它们的包套件是私有的数据库不应该用来存贮文件SQLite是一个轻量级的软件库原子量性坚固性独立性耐久性体积大小只用几千字节一些SQL的指令只是部分支持,例如:ALTER、TABLE武汉大学GoogleAndroid联合实验室SQLite数据库Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。武汉大学GoogleAndroid联合实验室SQLiteDatabase的execSQL()和rawQuery()方法。execSQL()方法:可以执行insert、delete、update和CREATETABLE之类有更改行为的SQL语句;rawQuery()方法:可以执行select语句。execSQL()方法的使用例子:SQLiteDatabasedb=....;db.execSQL(insertintoperson(name,age)values('Android开发',4));db.close();武汉大学GoogleAndroid联合实验室创建数据库Context.createDatabase(Stringname,intversion,intmode,CursorFactoryfactory)创建一个新的数据库并返回SQLiteDatabase对象假如不能被创建,则抛出FileNotFoundExceptionSQLiteDatabasemydataBase=SQLiteDatabase.create(newCursorFactory(){//创建一个数据库//工厂类,当查询时调用来实例化一个光标@OverridepublicCursornewCursor(SQLiteDatabasedb,SQLiteCursorDrivermasterQuery,StringeditTable,SQLiteQueryquery){//TODOAuto-generatedmethodstubreturnnull;}});武汉大学GoogleAndroid联合实验室创建数据库创建新的数据库SQLiteDatabasemyDataBase=this.openOrCreateDatabase(myDataBase.db,MODE_PRIVATE,newCursorFactory(){//创建新的数据库,名称myDatabase,模式MODE_PRIVATE,光标工厂//工厂类,一个可选工厂类,当查询时调用来实例化一个光标@OverridepublicCursornewCursor(SQLiteDatabasedb,SQLiteCursorDrivermasterQuery,StringeditTable,SQLiteQueryquery){//TODOAuto-generatedmethodstubreturnnull;}});武汉大学GoogleAndroid联合实验室4、使用ContentProvider共享数据当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferencesAPI读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。第一步需要继承ContentProvider并重写下面方法:publicclassPersonContentProviderextendsContentProvider{publicbooleanonCreate()publicUriinsert(Uriuri,ContentValuesvalues)publicintdelete(Uriuri,Stringselection,String[]selectionArgs)publicintupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs)publicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder)publicStringgetType(Uriuri)}武汉大学GoogleAndroid联合实验室使用ContentProvider共享数据第二步需要在AndroidManifest.xml使用provider对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider,ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,可以把ContentProvider看作是一个网站,authorities就是网站域名:manifest....applicationandroid:icon=@drawable/iconandroid:label=@string/app_nameproviderandroid:name=.PersonContentProviderandroid:authorities=cn.itcast.provider.personprovider//application/manifest武汉大学GoogleAndroid联合实验室IntentAndroid中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。与简单函数/方法调用,或者通过库调用接口的方式不太一样。在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。武汉大学GoogleAndroid联合实验室广播sendBroadcast()Intent之间传递数据广播Intent通过调用发送信息Context.sendBroadcast()Context.sendOrderedBroadcast()Context.sendS
本文标题:Android教程05-应用编程
链接地址:https://www.777doc.com/doc-2901323 .html