`

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的入门基础 第二部份 Android应用核心基础知识 第三部份 理解Activity 第四部份 用户界面 第五部份 Service 第六部份 BroadCast Receiver 第七部份 数据存储 第八部份 数据库操作

    android开发入门与实战(下)

    第7章 良好的学习开端——Android基本组件介绍 7.1 第一印象很重要——界面UI元素介绍 7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我...

    android开发入门与实战(上)

    第7章 良好的学习开端——Android基本组件介绍 7.1 第一印象很重要——界面UI元素介绍 7.1.1 视图组件(View) 7.1.2 视图容器组件(Viewgroup) 7.1.3 布局组件(Layout) 7.1.4 布局参数(LayoutParams) 7.2 我的美丽我...

    [Android开发从入门到精通].扶松柏.扫描版

    《Android开发从入门到精通》包括Android世界、界面布局实战演练、基本控件实战演练、数据存储实战演练等内容。 目录: 第1章 走进Android世界 第2塞界面布局实战演练 第3章 基本控件实战演练 第4章 数据存储实战...

    《Google Android开发入门与实战》

    第7章 良好的学习开端——Android基本组件介绍之友好地互动交流——对话框(Dialog)介绍与实例-2 第7章 良好的学习开端——Android基本组件介绍之温馨的提醒——Toast和Notification应用 第8章 移动信息仓库——...

    《Google Android开发入门与实战》.pdf

    第7章 良好的学习开端——android基本组件介绍 63 7.1 第一印象很重要——界面ui元素介绍 63 7.1.1 视图组件(view) 63 7.1.2 视图容器组件(viewgroup) 63 7.1.3 布局组件(layout) 64 7.1.4 布局参数...

    Android 4游戏编程入门经典

    第7章 opengl es介绍  7.1 opengl es概述以及关注它的原因  7.1.1 编程模型:一个比喻  7.1.2 投影  7.1.3 规范化设备空间和视口  7.1.4 矩阵  7.1.5 渲染管道  7.2 开始之前  7.3 glsurfaceview:从2008年...

    Flash+Flex+Air移动开发入门经典 pdf

    《flash+flex+air移动开发入门经典——适用于android、ios和blackberry》 第1章 flash、flex和air简介 1 1.1 adobe flash 1 1.2 actionscript 3.0 2 1.2.1 ecmascript 2 1.2.2 关键概念 3 1.3 flex框架 11 ...

    Google.Android开发入门与实战

     《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...

    Google Android开发入门与实战.part2.rar

    8、android的数据存储操作 9、Internet和Broadcast面对面 10、Service应用实例 11、开发android应用的基本步骤 12、android综合案例一 13、android综合案例二 14、android综合案例三 15、android综合案例四 16、...

    老罗android开发视频教程全集百度网盘下载

    【第一版第七章】老罗Android开发视频--服务器端Web编程(6集) 【第一版第八章】老罗Android开发视频-常用UI控件(33集) 【第一版第九章】老罗Android开发视频--存储数据和文件(7集) 【第一版第十章】老罗...

    android开发入门教程

    第14章 Android综合案例三——基于Android的豆瓣网(Web2.0)移动客户端开发 14.1 关于豆瓣网和豆瓣网API 14.1.1 豆瓣网介绍 14.1.2 豆瓣网API介绍 14.1.3 豆瓣网API认证 14.1.4 豆瓣网API快速入门 14.1.5 豆瓣网API...

    Android入门到精通源代码.

    第7章 Android中的核心Intent 7.1 Intent的作用 7.1.1 多Activity的Android应用 7.1.2 Activity之间的消息传递 7.2 Intent的分类 7.2.1 Action Intent 7.2.2 Broadcast Intent 7.3 解析Intent的实现 7.3.1 Intent ...

    Android高薪之路:Android程序员面试宝典 李宁

    第7章 网络与加密 7 1 客户端Socket 7 2 服务端Socket 7 3 非阻塞I O 7 4 WebView控件 7 5 HTTP和HTTPS 7 6 加密技术 第8章 蓝牙与Wi Fi 8 1 蓝牙 8 2 Wi Fi 第9章 电话 短信和联系人 9 1 来电和回电 9 2 短信 9 3 ...

    Google Android开发入门与实战.part3.rar

    8、android的数据存储操作 9、Internet和Broadcast面对面 10、Service应用实例 11、开发android应用的基本步骤 12、android综合案例一 13、android综合案例二 14、android综合案例三 15、android综合案例四 16、...

    Google Android开发入门实战 pdf 和 实例代码.part2

    第7章 良好的学习开端—Android基本组件介绍。介绍了Android提供的一些组件,使得读者可以很快地掌握并使用这些组件,这是以后开发的基础。通过本章的学习,可以掌握常见组件的使用方法和技巧,为后续快速开发提供...

Global site tag (gtag.js) - Google Analytics