Android本地数据存储:SharedPreferences, ExternalStorage, InternalStorag...
192 浏览量
更新于2024-08-31
收藏 1.18MB PDF 举报
"Android应用程序在运行过程中经常需要存储各种数据,如用户偏好设置、配置信息等。本文将详细介绍Android中的三种本地数据存储方式:SharedPreferences、ExternalStorage(外部存储)和InternalStorage(内部存储)。"
一、SharedPreferences
SharedPreferences是Android提供的一种轻量级的数据存储方案,适合存储少量的键值对数据,如用户设置。它的特点是存储的数据量小,但保存的时间持久,即使应用卸载后,数据仍然可以保留。
1、特点:
- 存储量小:适用于存储简单的配置信息,如布尔值、整型、浮点型、字符串等。
- 时间持久:数据会存储在设备的私有文件中,除非手动清除,否则数据会一直存在。
2、SharedPreferences操作模式:
- MODE_PRIVATE:默认模式,只有当前应用能访问。
- MODE_WORLD_READABLE:其他应用也能读取,但不能写入。
- MODE_WORLD_WRITEABLE:其他应用既能读取也能写入。
3、SharedPreferences的使用:
通常通过`getSharedPreferences()`方法获取`SharedPreferences`对象,然后使用`edit()`创建一个`SharedPreferences.Editor`用于编辑,最后调用`apply()`或`commit()`来提交修改。
```java
SharedPreferences preferences = getSharedPreferences("MyPreferences", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", "value");
editor.apply(); // 或 editor.commit();
```
二、外部存储ExternalStorage
外部存储是Android设备上的公共存储区域,可以用来存储用户可访问的文件,如音频、图片、视频等大文件。
1、概念:
- 外部存储是设备上可插入SD卡或内置的外部存储空间。
- 对于6.0及以上版本,需要动态申请写入外部存储的权限。
2、具体操作:
可以使用`Environment.getExternalStorageDirectory()`获取根目录,然后创建文件或目录进行读写。
```java
File externalFile = new File(Environment.getExternalStorageDirectory(), "test.txt");
FileOutputStream fos = new FileOutputStream(externalFile);
fos.write("Hello, External Storage!".getBytes());
fos.close();
```
3、动态权限(6.0以上):
需在AndroidManifest.xml中声明权限,并在运行时请求权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
```
三、内部存储InternalStorage
内部存储是每个应用的私有空间,只有该应用可以访问,即使设备被root,其他应用也无法直接访问。
1、概念:
- 内部存储是应用专属的存储区域,用于存储私密或敏感数据。
- 应用卸载时,内部存储的数据会被自动清理。
2、获取内存存储的目录:
使用`getFilesDir()`获取内部存储的文件目录,`getCacheDir()`获取缓存目录。
3、代码演示:
创建、读取内部存储文件:
```java
File internalFile = new File(getFilesDir(), "test.txt");
FileOutputStream fos = new FileOutputStream(internalFile);
fos.write("Hello, Internal Storage!".getBytes());
fos.close();
FileInputStream fis = new FileInputStream(internalFile);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, length));
}
fis.close();
```
四、开发过程中的异常处理
1、FileNotFound异常:
当尝试访问不存在的文件时,可能会抛出此异常,需要进行适当的错误处理。
2、DDMS中data、sdcard目录无法展开:
在Android Studio的设备监控器(DDMS)中,可能由于权限问题无法直接查看data和sdcard目录,可通过Logcat查看日志或使用adb命令行工具进行文件操作。
总结,Android提供了多种本地数据存储方式,开发者可以根据需求选择合适的方式。SharedPreferences适用于小量配置信息,外部存储适用于大文件,内部存储则用于私密数据。在实际开发中,理解并正确使用这些存储机制对于优化用户体验至关重要。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-06-01 上传
2023-05-27 上传
2023-06-10 上传
2023-06-03 上传
2023-06-10 上传
2023-06-08 上传
weixin_38623272
- 粉丝: 5
- 资源: 853
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南