当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

第十章 应用程序数据

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 11:14:01

由 suxinglrzzw 创建, 最后一次修改 2016-02-24 第十章 应用程序数据我们已经熟悉了Android应用程序的结构与基本组成元素,其中包括资源、清单与用户界面。在着手进行Android平台的功能性应用开发之后,大家肯定需要保存这样或者那样的数据信息。Android平台提供多种选项,用于打理应用程序中的数据存储任务,而这正是今天这篇文章要讨论的核心内容。从广义上讲,Android应用中的数据存储选项共有五种主要类型:将数据保存在应用的共享偏好当中、保存在内部存储(专属于应用本身)当中、保存在外部存储(向设备公开)当中、保存在数据库当中以及保存在可通过设备互联网连接访问的Web资源当中。受篇幅所限,我们无法详细对这些选项作出论述,但会对每种方案的基础特性加以概括、从而帮助大家在需要使用持久化数据时理清存储问题的解决思路。1. 共享偏好第一步共享偏好允许大家以键-值对的形式保存基本数据类型。应用程序的共享偏好文件通常被视为最简单的数据存储选项,但从本质上说它对于存储对象提出了一定程度的限制。大家可以通过它存储基本类型数字(如整数、长数以及浮点数字)、布尔值以及文本字符串。我们需要为自己保存的每个数值分配一个名称,从而在应用程序运行时据此对其进行检索。由于大家很可能在自己创建的第一款应用中就用到共享偏好,因此我们人把它作为讲解的重点、以更为详尽的方式(相较于其它选项)进行表述,从而帮助各位巩固必要知识。大家可以在自己的主Activity类中尝试这些代码,并在稍后运行本系列教程的应用示例时对其加以测试。在理想情况下,共享偏好应该可以符合应用程序中的用户配置选项,如同选择外观设置一样。大家应该还记得,我们曾经创建过一个简单的按钮,用户点击它之后屏幕上会显示出“Ouch”文本内容。现在让我们假设自己希望用户在点击一次之后,该按钮上会持续显示“Ouch”字样,且该状态在应用程序运行过程中始终保持不变。这意味着按钮上的初始文本仅在用户首次点击操作之前存在。让我们为应用程序添加共享偏好内容。在该类的起始位置、onCreate方法之前,我们为共享偏好选择一个名称:public static final String MY_APP_PREFS = "MyAppPrefs"利用“public static”修饰符,我们可以访问处于应用内任何类中的这项变量,因此我们只需要将偏好名称字符串保存在这里即可。我们使用大写是因为该变量属于常数,“final”修饰符也是因此而存在。每一次检索或者在应用程序偏好当中设置数据条目时,大家都必须使用同样的名称。第二步现在我们来编写共享偏好内容。在我们的onClick方法中、按钮“Ouch”文本设置部分的下方,尝试通过名称取回这条共享偏好:?SharedPreferences thePrefs = getSharedPreferences(MY_APP_PREFS, 0);大家需要为“android.conent.SharedPreferences”类添加一条导入。将鼠标悬停在“SharedPreferences”文本上方,并利用Eclipse提示完成导入。第一项参数是我们所定义的偏好名称,第二项则是我们作为默认选项的基本模式。现在我们需要为共享偏好指定一套编辑器,从而实现对其中数值的设定:SharedPreferences.Editor prefsEd = thePrefs.edit();现在我们可以向共享偏好当中写入值了:prefsEd.putBoolean("btnPressed", true);这里我们使用了布尔类型,因为当前状态只分为两种——用户已经或者尚未按下按钮。编辑器提供多种不同类型,我们可以从中选择以保存这套共享偏好,其中每种方法都拥有自己的名称与值参数。最后,我们需要提交编辑结果:prefsEd.commit();第三步现在让我们利用已经保存的值来检测用户运行应用程序后,按钮应该显示什么样的内容。在onCreate中的现有代码之后添加共享偏好:SharedPreferences thePrefs = getSharedPreferences(MY_APP_PREFS, 0);这一次我们不必使用编辑器,因为我们只需要获取一个值:boolean pressed = thePrefs.getBoolean("btnPressed", false);现在我们利用已经设置过的名称检索该值,并读取变量中的结果。如果该值尚未被设置,返回的则为第二项参数,也就是默认值——代表否定含义。现在让我们使用该值:if(pressed) theButton.setText("Ouch");如果用户在应用程序运行之后按下该按钮,则按钮直接显示“Ouch”字样。在本系列的后续文章当中,大家会看到我们在应用运行中进行这一操作的情况。这个简单的例子很好地诠释了共享偏好的使用过程。大家会发现,共享偏好在帮助应用程序通过外观及使用感受迎合用户喜好方面具有重要的作用。2. 私有内部文件第一步大家可以将文件保存在用户设备的内部以及外部存储当中。如果将文件保存在内部存储中,Android系统会将其视为专属于当前应用的私有数据。这类文件基本上属于应用程序的组成部分,我们无法在应用程序之外直接对其进行访问。再有,如果应用程序被移除、这些文件也会同时被清空。大家可以利用以下输出例程在内存存储中创建一个文件:FileOutputStream fileOut = openFileOutput("my_file", Context.MODE_PRIVATE);大家需要为“java.io.FileOutputStream”类进行导入添加。我们提供了文件名称与模式,选择私有模式意味着该文件将只能被该应用程序所使用。如果大家现在就把这部分代码加入到Activity当中,例如onClick方法中,Eclipse将弹出错误提示。这是因为当我们进行输入/输出操作时,应用程序可能遭遇一些需要应对的错误。如果大家的输入/输出操作无法解决这类错误,Eclipse就会提示异常状况、应用程序也会中止运行。为了保证应用程序在这种情况下仍能正常运行,我们需要将自己的输入/输出代码封装在try代码块当中:try{ FileOutputStream fileOut = openFileOutput("my_file", Context.MODE_PRIVATE);}catch(IOException ioe){ Log.e("APP_TAG", "IO Exception", ioe);}如果输入/输出操作导致异常,那么catch块中的上述代码就会付诸执行,从而将错误信息写入到日志当中。大家今后会经常用到应用程序中的Log类(导入‘android.util.Log’),它会记录代码执行时所发生的具体情况。我们可以为字符串标签定义一个类变量,也就是上述代码中的第一条参数。这样一旦出现错误,大家就可以在Android LogCat中查看异常信息了。第二步现在回到try块,在创建了文件输出

[1] [2]  下一页


第十章 应用程序数据