您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第07章Android中的数据存储1.
第7章Android中的数据存取主要内容数据存储SharedPreferences文件存储ContentProvider获取网络资源SQLite数据库手机文件存取SD卡文件存取访问本应用SharedPreferences访问其他应用SharedPreferences相关类库备忘录示例SQLiteOpenHelperSQLiteDatabaseSQLite概述概述相关类库应用示例UriContentResolverContentValuesUriMatcherContentUris访问系统联系人数据共享备忘录数据通过URL访问网络资源WebView控件显示网页数据存储数据存储实例7.1文件存储android是基于java语言的,在java中提供了一套完整的输入输出流操作体系,与文件相关的有FileInputStream,FileOutputStream等,通过这些类可以非常方便地访问磁盘上的文件内容。同样的android也支持这种方式来访问手机上的文件。Android手机中的文件有两个存储位置:内置存储空间和外部SD卡,针对不同位置的文件的存储的有所不同,下面分别对它们的操作。7.1.1手机内置存储空间文件的存取DiagramContext提供了如下两个方法来打开本应用程序的数据文件夹里的文件IO流。FileInputStreamopenFileInput(Stringname):打开应用程序的数据文件夹下的name文件对应输入流。FileOutputStreamopenFileOutput(Stringname,intmode):打开应用程序的数据文件夹下的name文件对应输出流。第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android会自动创建它。第二参数用于指定操作模式,有四种模式。Context.MODE_PRIVATE=0:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND。Context.MODE_APPEND=32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;Context.MODE_WORLD_READABLE=1:表示当前文件可以被其他应用读取;Context.MODE_WORLD_WRITEABLE=2:表示当前文件可以被其他应用写入。7.1.1手机内置存储空间文件的存取如果希望文件被其他应用读和写,可以传入:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE应用程序的数据文件默认保存在/data/data/packagename/files目录下,文件的后缀名随意。7.1.1手机内置存储空间文件的存取在手机内置存储空间中创建文件、写入内容的一般步骤:(1)调用openFileOutput()方法,传入文件的名称和操作的模式,该方法将会返回一个文件输出流;(2)调用write()方法,向这个文件输出流中写入内容;(3)调用close()方法,关闭文件输出流。读取手机内置存储空间中文件的一般步骤:(1)调用openFileInput()方法,传入需要读取数据的文件名,该方法将会返回一个文件输入流对象;(2)调用read()方法读取文件的内容;(3)调用close()方法,关闭文件输入流。7.1.1手机内置存储空间文件的存取1、当我们手机上不存在该文件时,我们先写后读与先读后写有区别吗?程序会不会出错?(具体做法:把手机上的content.txt文件删除,然后分别进行先写后读与先读后写操作,观察效果)。2、不同操作模式的区别,当我们多次执行写入操作时,文件里的内容是被覆盖还是不断的在文件末尾附加新数据?(具体做法:修改openFileOutput()方法的第二个参数)。7.1.1手机内置存储空间文件的存取7.1.1案例单击write按钮,将第一个文本编辑框(writeText)的内容写入到指定的文件中(content.txt),单击read按钮,从指定的文件中(content.txt)读取数据并显示在第二个文本框(readText)上。显示从文件读取的内容用于输入向文件写入数据readTextwriteText(read)(write)按钮read.setOnClickListener()调用read()完成文件读取。按钮write.setOnClickListener()调用write()进行数据存储。7.1.1案例程序清单:FileTest\res\layout\activity_main.xmlLinearLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalEditTextandroid:id=@+id/writeTextandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:minLines=2android:hint=@string/hint/Buttonandroid:id=@+id/writeandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=@string/write/→设置文本输入框最少为两行→设置文本输入框的提示信息7.1.1案例EditTextandroid:id=@+id/readTextandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:editable=falseandroid:hint=@string/readhint/Buttonandroid:id=@+id/readandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=@string/read//LinearLayout程序清单:FileTest\res\layout\activity_main.xml7.1.1案例在MainActivity.java中分别为写入内容和读取内容按钮添加事件处理.程序清单:FileTest\src\iet\jxufe\cn\android\MainActivity.javapublicclassMainActivityextendsActivity{privateButtonread,write;privateEditTextreadText,writeText;privateStringfileName=content.txt;publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);read=(Button)findViewById(R.id.read);write=(Button)findViewById(R.id.write);readText=(EditText)findViewById(R.id.readText);writeText=(EditText)findViewById(R.id.writeText);read.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){readText.setText(read());}});→设置保存的文件名→获取读取内容按钮→获取写入内容按钮→添加事件处理→将读取的内容显示在文本编辑框上7.1.1案例write.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){write(writeText.getText().toString());}});}publicvoidwrite(Stringcontent){try{FileOutputStreamfos=openFileOutput(fileName,Context.MODE_APPEND);→当第二个参数为Context.MODE_PRIVATE时,后写入的内容会覆盖原有内容。PrintStreamps=newPrintStream(fos);ps.print(content);}catch(Exceptione){e.printStackTrace();}}→将文本编辑框的内容写入文件→该方法将字符串内容写入文件程序清单:FileTest\src\iet\jxufe\cn\android\MainActivity.java7.1.1案例publicStringread(){StringBuildersbBuilder=newStringBuilder();try{FileInputStreamis=openFileInput(fileName);byte[]buffer=newbyte[64];inthasRead;while((hasRead=is.read(buffer))!=-1){sbBuilder.append(newString(buffer,0,hasRead));}}catch(Exceptione){e.printStackTrace();}returnsbBuilder.toString();}}程序清单:FileTest/src/iet/jxufe/cn/android/MainActivity.java→该方法用于读取文件信息,并以字符串返回→获取文件输入流→定义缓冲区的大小→记录每次读取的字节数7.1.2SD卡文件存取对于手机而言,内存非常宝贵,也是比较小的。内存空间会影响到手机的运行速度,通常不建议将数据保存到手机内存中,特别是一些比较大的资源如图片、音频、视频等。那么这些资源存放在哪里呢?存放在外存上,几乎所有的Android设备,都会配有外存设备,最常见的就是SD卡。可以把SD卡看作是移动硬盘或U盘。读取SD卡上的文件和读取手机上的文件类似,都是通过文件操作流的方式读取的,Android中没有提供单独的SD卡文件操作类,直接使用Java中的文件操作即可,关键是如何确定文件的位置。因为SD卡的可移动性,因此,在访问之前,需要验证手机的SD卡的状态。要想在模拟器中使用SD卡,首先需要创建一张SD卡(当然不是真的SD卡,只是一个镜像文件)。创建SD卡可以在Eclipse创建模拟器时随同创建,也可以使用Android提供的命令在命令行进行创建。打开命令行窗口进入androidSDK安装路径的tools目录下,输入以下命令在D盘创建一张容量为2G的SD卡,文件后缀名可以随便取,建议使用.img,生成的文件为镜像文件。如果你在环境变量中添加了Androidtools目录,则可直接输入相应的命令即可。mksdcard2048MD:\sdcard.img7.1.2SD卡文件存取读、写SD卡上的文件步骤如下:1、调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限。Environment.getExternalStorage
本文标题:第07章Android中的数据存储1.
链接地址:https://www.777doc.com/doc-3270006 .html