您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第6章-Android数据存储
第六章Android数据存储本章主要内容Android数据基本存储方式Android数据库编程——SQLiteAndroid数据基本存储方式Android数据基本存储方式--SharedPreferencesAndroid中的SharedPreferences是用来存储简单数据的一个工具类,这个工具类与Cookie的概念相似,它通过用键值对的方式把简单的数据存储在应用程序的私有目录(data/data/packagename/shared_prefs/)下指定的xml文件中。SharedPreferences提供了一种轻量级的数据存储方式,通过edit()方法来修改存储内容,通过commit()方法提交修改后的内容。SharedPreferences的重要方法contains(Stringkey):检查是否已存在key这个关键字。edit():为preferences创建编辑器Editor,通过Editor可以修改preferences里面的数据,通过执行commit()方法提交修改。getAll():返回preferences所有的数据(Map)。getBoolean(Stringkey,booleandefValue):获取Boolean型数据getFloat(Stringkey,floatdefValue):获取Float型数据getInt(Stringkey,intdefValue):获取Int型数据getLong(Stringkey,longdefValue):获取Long型数据getString(Stringkey,StringdefValue):获取String型数据registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):注册一个当preference被改变时调用的回调函数。unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):删除回调函数。SharedPreferences的重要方法SharedPreferences示例SharedPreferences关键代码(保存数据)save.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){SharedPreferencessettings=getSharedPreferences(SETTING_INFOS,0);//获取SharedPreferences对象//关键代码:保存用户名、密码及性别settings.edit().putString(NAME,username.getText().toString()).putString(PASSWORD,passwd.getText().toString()).putInt(SEX,sex.getSelectedItemPosition()).commit();}});SharedPreferences保存数据的原理当保存按钮时,会首先通过getSharedPreferences()方法得到settings,然后调用edit()方法得到编辑器Editor,使用Editor的putString和putInt将编辑框及下拉列表的值进行修改,最后使用commit()方法将数据提交保存。SharedPreferences以xml文件保存需要保存的值,更重要的是SharedPreferences只能由所属package的应用程序使用,而不能被其他应用程序使用,从而提高了安全性。Android数据基本存储方式--Files虽然SharedPreferences可以非常方便的存储数据,但是这种方式只适用于比较少量的数据,在大量数据需要存储时,可以借助于文件存储的功能。借助于JAVA文件I/O类,使用FileInputStream和FileOutputStream类来读取和写入文件,典型代码:StringFILE_NAME=filename.txt;//确定要操作文件的文件名FileOutputStreamfos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE);//创建输出流FileInputStreamfis=openFileInput(FILE_NAME);//创建输入流使用文件输入输出流的注意事项1.若创建FileOutputStream时指定的文件不存在,系统会自动创建这个文件。2.默认的写入操作会覆盖源文件的内容,如果想要把新写入的内容附加在原文件的内容之后,可以指定模式为Context.MODE_APPEND。3.默认地,使用openFileOutput方法打开的文件只能被其调用的应用程序使用,其他应用程序将无法读取这个文件。4.如果需要在不同的应用程序中共享数据,可以使用ContentProvider(将在后面提到)。Files示例Files示例Files示例代码说明—savefile方法protectedvoidsavefile()throwsIOException{FileOutputStreamfos=newFileOutputStream(mTextFile);fos.write(et.getText().toString().getBytes());fos.flush();//确保输出完毕fos.close();}该方法用于保存文件。保存文件的过程就是先使用FileOutputStream创建输出流,然后获取待写入到文件中的数据并写入文件中。FileOutputStream写文件的方法是使用write()方法,使用flush()方法保证输出流写入完成,最后使用close()方法关闭输出流,文件保存完毕。Files示例代码说明—helpdoc方法privatevoidhelpdoc()throwsIOException{save.setClickable(false);save.setEnabled(false);tw.setText(帮助文档,不可编辑);StringmyString=null;InputStreamis=getApplicationContext().getContentResolver().openInputStream(Uri.parse(android.resource://+com.android.example.fileiodemo/+R.raw.help));BufferedInputStreambis=newBufferedInputStream(is);ByteArrayBufferbaf=newByteArrayBuffer(8192);intcurrent=0;while((current=bis.read())!=-1){baf.append((byte)current);}myString=newString(baf.toByteArray(),GBK);et.setText(myString);}显示该程序的帮助文档。Files示例代码说明—readfile方法privatevoidreadfile(Filefile)throwsIOException{mTextFile=file;tw.setText(正在编辑文件+mTextFile.getName());if(!mTextFile.exists()){Log.v(duanhong,创建文件);if(!mTextFile.createNewFile()){Log.v(duanhong,创建文件失败);return;}}StringmyString=null;InputStreamis=newFileInputStream(mTextFile);//创建写入流BufferedInputStreambis=newBufferedInputStream(is);ByteArrayBufferbaf=newByteArrayBuffer(8192);intcurrent=0;while((current=bis.read())!=-1){baf.append((byte)current);}myString=newString(baf.toByteArray());et.setText(myString);}用于打开文件。该例中文件打开需要的步骤是使用FileInputStream得到待打开文件的输入流,然后从输入流中读出所包含的数据内容并显示到文本框中。Android数据基本存储方式--ContentProvider在Android中,使用URI(UniformResourceIdentifier,统一资源标识符)来定位文件和数据资源。相比常见的与之容易混淆的URL(UniformResourceLocator,统一资源定位器),URL是用于标识资源的物理位置,相当于文件的路径;而URI则是标识资源的逻辑位置,并不提供资源的具体位置。例如Android通讯录中的数据,如果使用URL来标识,可能会是一个很复杂的定位结构,并且一旦文件的存储路径改变,URL也必须随之改动;而对于URI,可以用诸如content://contract/people这样的逻辑地址来标识,对于用户来说,这种方式不需要关心文件的具体位置,即使文件位置改动也不需要变化,后台程序中URI到具体位置的映射通过程序员来进行维护。ContentProvider简介ContentProvider是应用程序私有数据对外的接口,程序通过ContentProvider访问数据时不需要关心数据具体的存储及访问过程,这样的方式既提高了数据的访问效率,同时也保护了数据。Activity类中有一个继承自ContentWapper的getContentResolver()无参数方法,该方法返回一个ContentResolver对象,通过调用其query、insert、update、delete方法访问数据。这几个方法的第一个参数均为URI,用来标识需要访问的资源或数据库。ContentProvider格式ContentProviderURI固定的形式如下,以联系人为例:content://contract/people/001ABCDA:类似于URL中的http://、ftp://等等;B:资源的唯一标识符,可以理解为数据库名;C:具体的资源类型,可以理解为数据库表名。D:ID号,用于指定一条数据,可以理解为数据库中的某一行的id。Android数据库编程——SQLiteSQLite简介SQLite是一款开源的轻量级嵌入式关系型数据库。它在2000年由D.RichardHipp发布,支持Java、Net、PHP、Ruby、Python、Perl、C等几乎所有的现代编程语言,并且支持Windows、Linux、Unix、MacOS、Android、iOS等几乎所有的主流操作系统平台。SQLite被广泛应用的在苹果、Adobe、Google的各项产品中。日常生活中所使用到的诸多应用程序中也不难发现SQLite的影子,如果读者的计算机中装有迅雷,请打开迅雷安装目录,搜索SQLite3.dll就能够发现该文件,从名称上基本能够说明迅雷使用了SQLite作为其数据库;还有金山词霸,它的安装目录中也能够发现SQLite.dll的存在。是的,SQLite早就广泛的应用在日常生活中人们所接触的各种产品中了,在Android中也内置了完整支持的SQLite数据库。SQLite特性遵守ACID;零配置——无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由的共享
本文标题:第6章-Android数据存储
链接地址:https://www.777doc.com/doc-3605405 .html