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

第十章 应用程序数据

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

例程之后,大家可以尝试将以下代码写入文件:String fileContent = "my data file content"fileOut.write(fileContent.getBytes());在将所有必要内容写入数据文件之后,利用以下代码作为结尾:fileOut.close();第三步当大家需要检索内部文件中的内容时,可以通过以下流程实现:try{ FileInputStream fileIn = openFileInput("my_file"); //read the file}catch(IOException ioe){ Log.e("APP_TAG", "IO Exception", ioe);}在try块当中,利用利用缓冲读取器读取文件内容:InputStreamReader streamIn = new InputStreamReader(fileIn);BufferedReader fileRead = new BufferedReader(streamIn);StringBuilder fileBuild = new StringBuilder("");String fileLine=fileRead.readLine();while(fileLine!=null){ fileBuild.append(fileLine+"\n"); fileLine=fileRead.readLine();}String fileText = fileBuild.toString();streamIn.close();大家不要被其中所涉及的大量不同对象所吓倒,这其实属于标准的Java输入/输出操作。其中的while循环会在文件中的每一行执行一次。在执行完成后,“fileText”变量将把文件内容保存为字符串、以备我们直接使用。3. 公共外部文件第一步只要用户设备支持,我们的应用程序也可以将文件保存在外部存储当中。外部存储种类繁多,包括SD卡、其它便携式介质或者用户无法移除但被系统认定为外部类型的内存存储机制。当我们将文件保存在外部存储中时,其内容将完全公开、大家也无法以任何方式阻止用户或者其它应用对其进行访问。在我们尝试将数据保存在外部存储中之前,必须首先检查对应存储机制是否可用——尽量避免意外状况绝对是种好习惯:String extStorageState = Environment.getExternalStorageState();系统会将信息以字符串的形式返回,大家可以对其进行分析、并与Environment类中的外部存储状态字段加以比对:if(Environment.MEDIA_MOUNTED.equals(extStorageState)){ //ok to go ahead and read/ write to external storage}else if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)){ //can only read}else{ //cannot read or write}即使设备上确实存在外部存储,我们也不能先入为主地假定应用可以向其写入数据。第二步在证实了我们确实能够向外部存储写入数据之后,大家接下来需要检索目录以指定文件保存的位置。以下应用程序设置内容指向八级及更高API:File myFile = new File(getExternalFilesDir(null), "MyFile.txt");这样大家就可以对该文件进行写入与读取了。不过也别忘了在项目的清单文件中添加以下仅限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />随着我们开发的应用程序变得愈发复杂,大家可能希望将自己保存得到的文件与其它应用共享。在这种情况下,大家可以使用公共目录下的各类通用条目,例如图片以及音乐文件。4. 数据库随着我们的应用程序所涉及的复杂结构数据越来越多,共享偏好或者内部/外部文件可能已经无法满足实际需求,这时候大家就应该考虑使用数据库方案了。Android支持开发人员在应用程序内部创建并访问SQLite数据库。在我们创建一套数据库时,其将作为私有组件服务单纯服务于相关应用程序。在Android应用中利用SQLite数据库的方法多种多样,推荐大家使用扩展SQLiteOpenHelper的类来实现这方面需求。在该类当中,我们需要定义数据库属性、创建各种类变量(包括我们所定义的数据库列表名称及其SQL创建字符串),具体代码如下所示:private static final String NOTE_TABLE_CREATE = "CREATE TABLE Note (noteID INTEGER PRIMARY KEY AUTOINCREMENT, " + "noteTxt TEXT);";这里所举的例子只涉及一套非常简单的表格,其中包含两列,一列内容为ID、另一列内容为文本;两列都用于记录用户注释信息。在SQLiteOpenHelper类当中,大家可以重写onCreate方法来创建自己的数据库。在应用程序的其它部分当中,例如Activity类中,大家可以通过SQLiteOpenHelper实现对数据库的访问,并利用WritableDatabase方法插入新记录、利用getReadableDatabase方法来查询现有记录,而后将结果显示在应用程序UI当中。在对查询结果进行迭代时,我们的应用程序将使用Cursor类——该类会依次引用结果集中的每一行内容。5. 互联网数据很多应用都会使用互联网数据资源,而且某些应用甚至基本是由一套界面与大量Web数据源所构成。大家可以利用用户设备上的互联网连接来存储并检索来自Web的数据,只要网络连接有效、这一机制就能正常运作。为了实现这一目标,我们需要在自己的清单文件中添加“android.permission.INTERNET”权限。如果我们希望自己的应用能够从互联网中获取数据,则必须保证这一流程脱离应用主UI线程。利用AsyncTask,大家可以通过后台进程的方式从Web源获取数据、在数据下载完成后将结果写入UI、最后让UI正常执行自身功能。大家还可以将一个内部AsyncTask类添加到Activity类当中,并在需要获取数据的时候在该Activity中创建一个AsyncTask实例。通过在AsyncTask中引入doInBackground与onPostExecute两种方法,大家可以检索Activity中所获取到的数据并将其写入用户界面。获取Web数据在应用开发工作当中属于中等难度的任务,大家最好在熟练掌握了Android开发知识之后再进行尝试。不过大家可能很快就会发现,这样的数据获取机制对不少应用都非常适合,因为这能有效利用用户设备的连接资源。Java与Android都提供相关工具,用于处理返回的结构化数据——例如JSON feed。结论在今天的文章中,我们基本了解了开发Android应用程序时需要接触到的数据存储方案。无论大家最终选择哪种方案,都应该以实际需求作为参考标准,因为不同的方案只适合特定需求。在本系列教程的下一篇当中,我们将共同探讨如何将物理设备与已安装的Eclipse相连、同时学习如何创建虚拟设备。在此之后,我们还将探索如何让应用程序运行在这两种类型的设备之上。顺便向大家报告,再有两篇文章本系列教程就将彻底结束;在最后一篇文章中,我们将研究通用类以及Android Activity生命周期,从而帮助大家做好开发应用程序的一切准备。

上一页  [1] [2] 


第十章 应用程序数据