Android本地数据存储:SharedPreferences, ExternalStorage, InternalStorag...
135 浏览量
更新于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适用于小量配置信息,外部存储适用于大文件,内部存储则用于私密数据。在实际开发中,理解并正确使用这些存储机制对于优化用户体验至关重要。
点击了解资源详情
点击了解资源详情
点击了解资源详情
228 浏览量
2023-05-27 上传
2023-06-10 上传
418 浏览量
143 浏览量
2021-10-11 上传
196 浏览量
weixin_38623272
- 粉丝: 5
- 资源: 853
最新资源
- 基于Cordova + Framework7 + React + Webpack构建混合App.zip
- CoronaGame_front
- 无线传感网络节点能耗模型.zip
- 蓝色扁平化商务工作汇报图表下载PPT模板
- ember-bootstrap-controls:一个Ember组件库,它使用Bootstrap4表单并输入样式和html
- PWABuilder-CLI:用于应用程序生成的Node.js工具
- XY轴点焊机_三菱伺服_
- 毕业设计,基于人脸识别的智能家居控制系统.zip
- rust-reference-book:中文版的Rust参考
- assignment-problem:匈牙利方法的分配问题
- 微立体建筑行业工作汇报图表大全PPT模板
- 电脑使用时间管理 ManicTime-4.3.rar
- firebase-firestore-lite:浏览器的轻量级云Firestore库
- bouquins:calibre 电子书管理器的 Web 前端
- MFC中修改Button控件字体、字体大小、背景色、背景图片
- Baymin是一个基于Android系统开发的可以用于语音聊天的智能机器人,它能够陪你聊天,帮你查天气,查路线、车票.zip