• 1. 第四章 数据存储 文件存储 XML序列化和解析 SharedPreferences
  • 2. ✎ 学习目标重点了解掌握文件存储 SharedPreferences13 数据存储的方式2XML序列化和解析
  • 3.  目录让IT教学更简单,让IT学习更有效数据存储方式4.1文件存储 4.2XML序列化和解析4.3☞点击查看本小节知识架构SharedPreferences4.4☞点击查看本小节知识架构本章小结4.5☞点击查看本小节知识架构
  • 4.  知识架构4.2 文件存储 返回目录4.2.1文件存储简介4.2.2案例——存储用户信息
  • 5.  知识架构4.3 XML序列化和解析返回目录4.3.1XML序列化 XML解析4.3.3 案例——天气预报4.3.44.3.2案例——XML序列化
  • 6.  知识架构4.4 SharedPreferences返回目录4.4.1SharedPreferences的使用4.4.2案例——QQ登录
  • 7. 让IT教学更简单,让IT学习更有效Android中有几种 数据存储方式?4.1 数据存储方式
  • 8. Android中的数据存储方式有五种,分别是文件存储、SharedPreferences、SQLite数据库、ContentProvider以及网络存储。 4.1.1 文件存储简介数据 存储文件存储Sharedpreferences网络存储ContentProviderSQLite数据库4.1 数据存储方式
  • 9. 让IT教学更简单,让IT学习更有效4.2 文件存储4.2.1 文件存储简介。文件存储是Android中最基本的一种数据存储方式,它与Java中的文件存储类似,都是通过I/O流的形式把数据原封不动的存储到文档中。 Android中的文件存储分为内部存储和外部存储。 内部存储 指将应用程序中的数据以文件方式存储到设备的内部存储空间中(位于data/data//files/ 目录)外部存储 指将文件存储到一些外部设备上(通常位于mnt/sdcard目录下,不同厂商生产的手机路径可能不同),属于永久性的存储方式。
  • 10. 让IT教学更简单,让IT学习更有效4.2 文件存储4.2.1 文件存储简介。首先介绍File存储常用操作: openFileOutput(String name, int mode) 保存文件内容,打开指定的私有文件输出流,返回值类型为FileOutputStream,name为要打开的文件名,不能包含路径分隔符,mode为操作模式,有以下几种保存模式: Environment.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。 Environment.MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 Environment.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。 Environment.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 在使用模式时,可以用"+"来选择多种模式,比如openFileOutput(FileName, Environment.MODE_PRIVATE+MODE_WORLD_READABLE)。
  • 11. 让IT教学更简单,让IT学习更有效4.2 文件存储4.2.1 文件存储简介。存储数据核心代码 try { // 以追加模式创建了file.txt文件,并写入文字"保存文件到应用程序下" FileOutputStream outStream = this.openFileOutput("file.txt", Context.MODE_APPEND); outStream.write("保存文件到应用程序下".getBytes()); outStream.close(); Toast.makeText(SaveFile.this, "保存文件成功", Toast.LENGTH_LONG).show(); } catch (Exception e) { // 抛出异常 Toast.makeText(SaveFile.this, "保存文件失败", Toast.LENGTH_LONG).show(); } }
  • 12. 让IT教学更简单,让IT学习更有效4.2 文件存储4.2.1 文件存储简介。openFileInput(String name) 读取文件内容,打开指定的私有文件输出流,返回值类型为FileInputStream,name为要打开的文件名,不能包含路径分隔符。 对于File存储所创建的文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Environment.MODE_WORLD_READABLE和Environment.MODE_WORLD_WRITEABLE权限 。 deleteFile(String name) 删除指定的文件,返回值类型为boolean,name为要删除的文件名,不能包含路径。 getDir(String name, int mode) 在应用程序的数据文件下获取或创建name对应的子目录,返回值类型为File。 getFilesDir() 得到该应用程序数据文件夹的绝对路径,返回值类型为File。 fileList() 得到该应用程序数据文件夹下的全部文件的文件名,返回值类型为String[]。
  • 13. 让IT教学更简单,让IT学习更有效4.2 文件存储4.2.1 文件存储简介。try { FileInputStream inStream = this.openFileInput("file.txt"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = -1; while ((length = inStream.read(buffer)) != -1) { stream.write(buffer, 0, length); } stream.close(); inStream.close(); textView.setText(stream.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { return; }。
  • 14. SDCard存储 getDataDirectory() 获得Android下的data文件夹的目录,返回值类型为File。 getDownloadCacheDirectory() 获得AndroidDownload/Cache内容的目录,返回值类型为File。 getExternalStorageDirectory() 获得Android外部存储器也就是SDCard的目录,返回值类型为File。 getRootDirectory() 获得Android下的root文件夹的目录,返回值类型为File。 4.2 文件存储
  • 15. getExternalStorageState() 获得Android外部存储器的当前状态,返回值类型为String,有以下几种保存模式: Environment.MEDIA_BAD_REMOVAL:在没有正确卸载SDCard之前就移除了。 Environment.MEDIA_CHECKING:正在磁盘检查。 Environment.MEDIA_MOUNTED:已经挂载并且拥有可读可写权限。 Environment.MEDIA_MOUNTED_READ_ONLY:已经挂载, 但只拥有可读权限。 Environment.MEDIA_NOFS:对象空白, 或者文件系统不支持。 Environment.MEDIA_REMOVED:已经移除扩展设备。 Environment.MEDIA_SHARED:如果SDCard未挂载, 同时通过USB大容量存储方式与其他设备共享。 Environment.MEDIA_UNMOUNTABLE:不可以挂载任何扩展设备。 Environment.MEDIA_UNMOUNTED:已经卸载。 4.2 文件存储
  • 16. 通过详细的步骤来说明对SDCard的读取操作 1要在AndroidMainfest.xml中添加权限。 2先判断这台手机设备上是否有SDCard且具有读写SDCard的权限,用Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)来判断; 34使用IO流对外部存储器File类进行文件的读写等操作。调用Environment.getExternalStorageDirectory()获得到外部存储器的目录; 4.2 文件存储
  • 17. 4.2 文件存储4.2.2 案例——存储用户信息为了让初学者更好地掌握文件存储数据的方式,接下来通过一个存储用户信息的案例来学习。
  • 18. 4.3 XML序列化和解析4.3.1 XML序列化序列化是将对象状态转换为可保持或传输的过程。在序列化对象时,需要使用XmlSerialize序列化器,它可以将IO流中传输的对象变得像基本类型数据一样,实现数据传递的功能。 序列化后的对象以XML形式保存,因此,先来看一下person.xml文件。
  • 19. 4.3 XML序列化和解析4.3.1 XML序列化 XML序列化的示例代码如下: XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(fileOutputStream, "utf-8"); serializer.startDocument("utf-8",ture); serializer.startTag(null,"persons"); serializer.text("张三"); serizlizer.endTag(null,"persons"); serializer.endDocument(); 创建XmlSerializer对象设置文件编码方式写入XML文件标志开始节点写入内容结束节点文档结束
  • 20. 4.3 XML序列化和解析 4.3.2 案例——XML序列化为了让初学者更好的掌握XML序列化。接下来通过一个“XML序列化”的案例来演示如何将Person对象序列化为XML文件。
  • 21. 01将XML文件所有内容以文档树方式存放在内存中。 允许使用DOM API遍历XML树、检索所需的数据,这样便能根据树的结构以节点形式来对文件进行操作 0203PULL解析SAX解析DOM解析逐行扫描XML文档,当遇到标签时触发解析处理器,采用事件处理的方式解析XML。 在读取文档的同时即可对XML进行处理,不必等到文档加载结束,相对快捷。Android集成了PULL解析器,因此,常用的解析方式就是PULL解析 使用PULL解析,首先要创建XmlPullParser解析器,该解析器提供了很多属性,通过这些属性可以解析出XML文件中各个节点内容。4.3 XML序列化和解析4.3.3 XML解析
  • 22. 4.3 XML序列化和解析4.3.3 XML解析
  • 23. 4.3 XML序列化和解析4.3.4 案例——天气预报大多数人会在手机中安装一个天气预报的软件,如墨迹天气、懒人天气等。这些软件在获取天气信息时,都是通过解析XML文件得到的。 下面就通过一个案例“天气预报”来演示如何解析XML文件。
  • 24. 4.4 SharedPreferences4.4.1 SharedPreferences的使用SharedPreferences是Android平台上一个轻量级的存储类,用于存储一些应用程序的配置参数,例如用户名、密码、自定义参数的设置等。 SharedPreferences中存储的数据是以key/value键值对的形式保存在XML文件中,该文件位于“data/data//shared_prefs”文件夹中。
  • 25. 4.4 SharedPreferences4.4.1 SharedPreferences的使用SharedPreferences的四种操作模式:  Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入. 。
  • 26. 4.4 SharedPreference存储SharedPreferences对象的常用方法有以下几种:contains(String key) 判断SharedPreferences是否包含特定名称为键(key)的数据,返回值类型为boolean,是返回true,否返回false。 edit() 返回一个Edit对象用于操作SharedPreferences,返回值类型为Editor。 getAll() 获取SharedPreferences数据里全部的键值对(key-value),返回值类型为Map。 getXxx(String key, Xxx defValue) 获取SharedPreferences指定键(key)所对应的值(value),其中Xxx表示不同的数据类型。
  • 27. 4.4 SharedPreference存储SharedPreferences.Editor对象的常用方法 clear() 清空SharedPreferences里所有的数据 。putXxx(String key,Xxx value) 向SharedPreferences存入指定的key对应的数据,其中Xxx与之前所述相同一样,表示不同的数据类型。 commit() 当Editor编辑完成后,调用该方法可以提交修改,相当于数据库中的提交操作。无论对SharedPreferences对象进行了什么操作,最后都必须使用commit()方法进行保存,否则将无法存储修改信息。返回值类型为boolean,提交成功返回true,失败返回false。 remove(String key) 删除SharedPreferences里指定key对应的值。返回值类型为Editor。
  • 28. 4.4 SharedPreference存储使用SharedPreferences保存键值对(key-value)的步骤如下: 1使用Activity类的getSharedPreferences(String name, int mode)方法获得SharedPreferences对象,其中存储键值对(key-value)的文件的名称由getSharedPreferences方法的name指定,mode则指定打开方式 。2使用SharedPreferences的edit()方法获得SharedPreferences.Editor对象。 3通过SharedPreferences.Editor的putXxx(String key,Xxx value)方法写入键值对(key-value)。 4通过SharedPreferences.Editor的commit()方法提交保存键值对(key-value)。
  • 29. 4.4 SharedPreference存储使用SharedPreferences读取键值对(key-value)的方法: : 1使用Activity类的getSharedPreferences(String name,int mode)方法获得所需读取的SharedPreferences对象,与上述保存键值对(key-value)的第一步相同。 2使用SharedPreferences接口的getXXX(String key,Xxx value)方法,可以方便的获得对应键(key)的值(value)。 4
  • 30. 4.4 SharedPreferences4.4.1 SharedPreferences的使用存储数据 SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("name", "传智播客"); editor.putInt("age", 8); editor.commit(); 取出数据 SharedPreferences sp = context.getSharedPreferences(); String data = sp.getString("name",""); 编辑数据 SharedPreferences sp = context.getSharedPreferences (); Editor editor = sp.edit(); editor.remove("name"); editor.clear(); editor.commit();
  • 31. 4.4 SharedPreferences4.4.2 案例——QQ登录大多数人使用电脑第一件事基本上都是登录QQ,为了方便,大家通常会使用记住密码功能,直接点击登录按钮即可完成登录功能。 在Android手机中,同样可以实现这个功能,接下来通过一个“QQ登录”的案例来演示如何使用SharedPreferences存储数据。
  • 32. 4.5 本章小结本章主要讲解了Android中的数据存储,首先介绍了Android中常见的数据存储方式,然后讲解了文件存储以及XML序列化和解析,最后讲解了SharedPreferences。数据存储是Android开发中非常重要的内容,每个应用程序基本上都会涉及到数据存储,因此要求初学者必须熟练掌握本章知识。