`

Android4开发入门经典 之 第七部分(2):数据存储

 
阅读更多

 


数据存储基本知识

Android系统提供了多种数据存储的方式,如下:

1:Shared Preferences:用来存储私有的、原始类型的、简单的数据,通常是Key-value对
2:Internal Storage:在设备内部存储器中存储数据
3:External Storage:在设备的扩展存储上保存数据,通常是SD卡
4:SQLite Databases:SQLite数据库
5:Network Connection:存储数据到网络服务器上

使用Shared Preferences

Shared Preferences是用来存储一些应用私有的、原始类型的、简单的数据的一个框架,保存的数据通常是Key-value对

要获得SharedPreferences对象,通常有两种方法:

1:getSharedPreferences():如果你想要使用多个preferences文件的话,可以通过传入一个识别的名称就可以获取到相应的SharedPreferences对象
2:getPreferences():如果一个preferences文件仅仅在当前的Activity中使用的话,你可以使用这个方法,无需要提供识别的名称。
使用SharedPreferences对象来获取数据非常简单,直接使用相应的getter方法即可

使用SharedPreferences对象来存储数据,大致有如下几步

1:调用edit()方法来得到SharedPreferences.Editor
2:调用相应的put方法值添加进去
3:调用commit来提交保存这些数据

向SharedPreferences对象写入数据


java代码:
  1. SharedPreferences sp =getSharedPreferences("SP",Activity.MODE_PRIVATE);  
  2. SharedPreferences.Editor editor = sp.edit();  
  3. editor.putString("param1""sp1");  
  4. editor.putInt("param2"222);  
  5. editor.commit();  
注意:所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方法,每调用一次就会创建一个Editor

在获得SharedPreferences对象的时候,需要指定文件创建的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_WORLD_READABLE:赋予所有的应用程序都可以读取该文件
3:MODE_WORLD_WRITEABLE:赋予所有的应用程序都可以写该文件
4:MODE_MULTI_PROCESS:SharedPreference的装载标记,设置它,文件将会在SharedPreference实例被装载到进程的时候检查是否被修改,主要用在一个应用有多个进程的情况。

从SharedPreferences对象读取数据


java代码:
  1. SharedPreferences sp = T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);  
  2. String p1 = sp.getString("param1","");  
  3. int p2 = sp.getInt("param2",0);  
SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

Internal Storage

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法向这个文件夹中写入数据。
要读取应用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

在使用openFileOutput方法的时候,需要指定打开的模式:

1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_APPEND:如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。
3:MODE_WORLD_READABLE:赋予所有的应用程序对该文件读的权限。
4:MODE_WORLD_WRITEABLE:赋予所有的应用程序对该文件写的权限。

向应用对应的Internal Storage里面写入数据,这里以写对象来示例,如下:


java代码:
  1. FileOutputStream fout = null;  
  2. ObjectOutputStream os = null;  
  3. try{  
  4. fout = HelloWorldActivity.this.openFileOutput("MyData.txt",Activity.MODE_PRIVATE);  
  5. os = new ObjectOutputStream(fout);  
  6. os.writeObject(list);  
  7. }catch(Exception err){err.printStackTrace();}  
  8. finally{  
  9. try {fout.close();}catch(IOException e1){e1.printStackTrace();}  
  10. try {os.close();} catch(IOException e){e.printStackTrace();}  
  11. }  
  12. 不支持BufferedOutputStream  

读取应用对应的Internal Storage里面的数据,这里以读取对象来示例,如下:


java代码:
  1. FileInputStream fin = null;  
  2. ObjectInputStream os = null;  
  3. try{  
  4. fin = HelloWorldActivity.this.openFileInput("MyData.txt");  
  5. os = new ObjectInputStream(fin);  
  6. Toast.makeText(HelloWorldActivity.this"read file="+os.readObject(), Toast.LENGTH_LONG).show();  
  7. }catch(Exception err){  
  8. err.printStackTrace();  
  9. }finally{  
  10. try{fin.close();}catch(IOException e1){e1.printStackTrace();}  
  11. try{os.close();}catch(IOException e){e.printStackTrace();}  
  12. }  
  13. 同样不支持BufferedInputStream  

Internal Storage-保存Cache文件

如果你希望保存一些Cache数据,你可以使用getCacheDir() 来打开文件,将会把数据存储到一个临时的Cache文件里面。
当设备的内部存储空间低的时候,Android系统可能会清除这些Cache文件,以回收存储空间,这也意味着,你不能在Cache文件里面存储需要持久化的数据。

Internal Storage-其它常用方法

在Context中其他常用的方法:

1:getFilesDir()
得到内部存储的文件系统的绝对路径
2:getDir()
在内部存储中创建目录,如果存在的话就打开这个目录
3:deleteFile()
删除文件
4:fileList()
返回当前应用存储的文件列表

External Storage(操作SD卡)

Android的I/O基本上和Java的I/O是一样的,只有一点点不同的地方,比如:

1:需要加入sdcard的操作权限
2:需要判断sd卡是否存在,存在才能操作
3:放在sdcard的文件是公共的,而放到自己应用目录里面的文件才是私有的

常用的功能

1:在AndroidManifest.xml添加sdcard读写操作权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
2:在AndroidManifest.xml添加能创建和删除sdcard文件的操作权限
<uses-permission android:name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
3:判断SD卡是否插入
Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED)
4:获得SD卡根目录
Android7及以下版本,使用:Environment.getExternalStorageDirectory()可以获得如下路径“/Android/data/<package_name>/files/”
Android8及以上版本,建议使用:Context的getExternalFilesDir(type)方法,type表示你想要访问什么样的子目录,比如Environment.DIRECTORY_MUSIC,如果访问根目录,就传入null。

从SD卡上读文件,基本就是Java里面I/O的操作,这里以读对象为例:


java代码:
  1. public Object readFile(String filePathName) {  
  2. Object ret = null;  
  3. FileInputStream fins = null;  
  4. ObjectInputStream os = null;  
  5. try {  
  6. File file = new File(Environment.getExternalStorageDirectory() + filePathName);  
  7. fins = new FileInputStream(file);  
  8. os = new ObjectInputStream(fins);  
  9. ret = os.readObject();  
  10. catch(Exception err){err.printStackTrace();}finally{  
  11. try {fins.close();}catch(IOException e){e.printStackTrace();}  
  12. try {os.close();}catch(IOException e){e.printStackTrace();}  
  13. }  
  14. return ret;  
  15. }  
  16. 比较遗憾的是,目前加上BufferedInputStream就出错  

向SD卡上写文件,基本就是Java里面I/O的操作,这里以写对象为例:


java代码:
  1. public void writefile(String filePathName,Object obj){  
  2. FileOutputStream fouts = null;  
  3. ObjectOutputStream os = null;  
  4. try {  
  5. File file = new File(Environment.getExternalStorageDirectory() +filePathName);  
  6. if(file.getParentFile().isDirectory() && !file.getParentFile().exists()){  
  7. file.getParentFile().mkdirs();  
  8. }  
  9. if(!file.exists()){ file.createNewFile(); }  
  10. fouts = new FileOutputStream(file);  
  11. os = new ObjectOutputStream(fouts);  
  12. os.writeObject(obj);  
  13. catch (Exception err) {err.printStackTrace();  
  14. }finally{  
  15. try {fouts.close();}catch(IOException e){e.printStackTrace();}  
  16. try {os.close();}catch(IOException e){e.printStackTrace();}  
  17. }  
  18. }  
  19. 如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法  
  20.    

视频配套PPT,视频地址【 Android4开发入门经典独家视频课程

 

9
11
分享到:
评论
2 楼 jenmhdn 2012-07-08  
jacking124 写道
不错的,支持你。。

谢谢支持
1 楼 jacking124 2012-07-08  
不错的,支持你。。

相关推荐

    Android4.0开发入门经典学习文档合集

    第七部分(2):数据存储【】Android4开发入门经典 ? 第三部分【】Android4开发入门经典 ? 第九部分【】Android4开发入门经典 ? 第二部分【】Andr 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Android开发入门经典

    “第七部分 数据存储”将介绍Android中数据存储的方法,包括使用SharedPreferences进行轻量级的数据存储,利用应用内部存储机制,以及如何使用外部存储(例如SD卡)进行数据的读写。 “第八部分 数据库操作”部分则...

    android4开发入门经典 开发文档

    《Android4开发入门经典》是一本专为初学者设计的指南,旨在帮助读者掌握Android 4(也称为Ice Cream Sandwich)平台的应用程序开发。这本书通过详细的笔记和分章节的PDF文档,逐步介绍了Android开发的基本概念和...

    Android开发入门与实战 第二版 源码 最新更新

    《Android开发入门与实战 第二版》是一本专为初学者设计的Android编程书籍,旨在帮助读者快速掌握Android应用开发的基础知识和实践技巧。书中涵盖了从安装开发环境到创建完整应用的全过程,提供了丰富的实例和源码,...

    android开发从入门到精通光盘源代码第二章

    "android开发从入门到精通光盘源代码第二章"提供的资源正是为了帮助初学者系统学习并深入理解这一平台的编程技术。本章节可能涵盖了Android应用的基础架构、UI设计、事件处理、数据存储等多个方面,通过实际的源代码...

    android开发入门与实践体验-光盘代码

    6. **数据存储**:Android提供了多种数据存储方式,如Shared Preferences(轻量级键值对存储)、SQLite数据库(结构化数据存储)和文件系统。掌握这些方法可以帮助开发者管理应用数据。 7. **权限管理**:从Android...

    Android开发从入门到精通(随书光盘)【源码】第9章

    在本资源中,我们聚焦于"Android开发从入门到精通"这一主题,特别是关于第9章的源码。这表明该压缩包包含了Android应用开发的一个关键章节的学习资料,特别是实战案例,这对于初学者和进阶者都极具价值。以下是根据...

    Android App开发入门范例程序

    在Android App开发领域,入门是每个开发者必经的阶段。这个"Android App开发入门范例程序"集合提供了多个章节的学习材料,旨在帮助新手快速掌握Android应用的基础开发技能。以下是各个章节和FlagAPI部分可能涉及的...

    Android开发从入门到精通(随书光盘)【源码】第7章

    总之,"Android开发从入门到精通"的第7章覆盖了Android开发的核心元素,从界面设计到数据存储,从网络通信到性能优化,这些都是构建高质量Android应用所必需的技能。通过深入学习并实践本章内容,无论是新手还是有...

    Android开发从入门到精通.pdf

    《Android开发从入门到精通》是一本专门为Android编程新手量身打造的教程。这本书全面覆盖了Android开发的基础知识,旨在帮助读者快速掌握Android应用开发的核心技能。以下是对书中的主要知识点进行的详细解读: 1....

    Google Android开发入门与实战.(配书源码)

    在Android开发领域,Google Android开发入门与实战是一本颇受欢迎的书籍,旨在引导初学者进入Android应用开发的世界。这本书由靳岩和姚尚朗合著,由人民邮电出版社出版,提供了丰富的实例和源代码来辅助学习。由于...

    Android开发从入门到精通源码

    《Android开发从入门到精通源码》是一套全面解析Android应用开发的教程,旨在帮助初学者和有一定经验的开发者深入理解Android系统的工作原理,并通过实际的源码学习提升开发技能。该教程分为两大部分,涵盖了从基础...

    Android开发入门与实战包含代码

    7. **数据存储**:Android提供了多种数据存储选项,如SharedPreferences、SQLite数据库和文件系统。了解这些存储方式的优缺点和应用场景,可以帮助你合理管理应用数据。 8. **异步处理**:Android应用通常需要进行...

    Android开发入门经典资料下载

    《Android开发入门经典》这本书是Android开发者初学者的宝贵资源,它涵盖了Android应用开发的基础知识,从环境搭建到实际项目开发,全方位地引导新手进入Android世界。以下将详细阐述书中的核心知识点: 1. **...

    Google Android 开发入门指南(第二版).pdf

    ### Google Android 开发入门指南(第二版)知识点总结 #### 一、书籍基本信息与作者介绍 - **书名**:《Google Android 开发入门指南》第二版 - **作者**:Mark L. Murphy 编著;王世江 改编 - **出版时间**:2009...

    android开发入门教程PDF(两部)

    这两部PDF教程,"Android开发入门教程"和"Android手机程序电子书开发",都是针对初学者精心编写的指南,旨在帮助他们快速理解和掌握Android应用开发的基础知识。 首先,"Android开发入门教程"可能涵盖了以下几个...

    Android 应用开发入门经典教程

    以上只是《Android应用开发入门经典教程》中部分内容的概述,实际教程会更深入地探讨每个主题,通过实例和练习帮助读者巩固知识,真正掌握Android应用开发。如果你对Android开发感兴趣,这无疑是一份值得深入学习的...

    Android开发入门与实战体验-ppt

    **Android开发入门与实战体验** Android开发是移动应用开发领域中的一个重要组成部分,它基于Java语言,为全球数亿智能手机和平板设备提供操作系统支持。这份"Android开发入门与实战体验-ppt"提供了丰富的学习资源...

Global site tag (gtag.js) - Google Analytics