设为首页 加入收藏

TOP

一起学Android之Storage(一)
2019-08-30 07:27:28 】 浏览:78
Tags:一起 Android Storage

概述

在Android开发中,存储(Storage)的方式根据具体的需求不同而不同,例如数据对应用程序是私有的还是其他应用程序(和用户)可以访问的,以及保存数据需要多大的空间。

存储分类

主要的存储方式有以下几种(本文主要涉及前三种):

  1. Shared Preferences:以键值对( key-value pairs)的方式存储在程序内部;
  2. Internal Storage:将数据保存在设备内存中;
  3. External Storage:将公有数据保存在外部存储中(SD卡);
  4. SQLite Databases:保存结构化数据到私有数据库中;
  5. Network Connection:通过网络服务器,将数据存储在web上。

涉及知识点

涉及的知识点如下:

  1. SharedPreferences 共享目录接口,通过Context中的getSharedPreferences进行实例化。
  2. SharedPreferences.Editor 共享目录编辑器,需要以commit进行保存。
  3. FileOutputStream 文件输出流,用write方法将数据保存文件。
  4. FileInputStream 文件输入流,用于读取文件的内容,通过Context中的openFileInput进行实例化,用read方法进行读取内容。
  5. deleteFile Context中的方法,删除指定路径的文件
  6. Environment.getExternalStorageDirectory() 获取外部存储的根目录。
  7. Environment.getExternalStorageState() 获取外部存储卡的状态。
  8. File.separator 文件路径分割符,用斜杠(/)进行表示。
  9. BitmapFactory.decodeResource(getResources(), R.drawable.bg) 通过资源文件实例化对象。
  10. BitmapFactory.decodeFile(imgFile.getAbsolutePath() 通过具体文件的路径实例化对象。
  11. File 文件对象,mkdirs() 创建多层目录 mkdirs创建单个目录,exists() 判断文件或目录是否存在,createNewFile() 创建新文件。

Shared Preferences

此种方式,只能保存简单的数据类型如下图所示:

代码如下:

 1     /**
 2      * SharedPreferences保存
 3      * @param v
 4      */
 5     public void sharedSave(View v){
 6         String name=etName.getText().toString().trim();
 7         String age=etAge.getText().toString().trim();
 8         if(TextUtils.isEmpty(name)||TextUtils.isEmpty(age)){
 9             return;
10         }
11         //构造一个编辑器----笔
12         SharedPreferences.Editor editor = sp.edit();
13         //数据的存储---只能存储简单的数据
14         editor.putString("name",name);
15         editor.putString("age",age);
16         //提交--保存
17         editor.commit();
18         //清空
19         etName.setText("");
20         etAge.setText("");
21     }
22 
23     /**
24      * SharedPreferences读取
25      */
26     public void sharedRedo(View v){
27         String name=sp.getString("name","");
28         String age=sp.getString("age","");
29         etName.setText(name);
30         etAge.setText(age);
31     }

Internal Storage

将数据内容转换为字节的方式保存在文件中,如下图所示:

代码如下:

 1     /**
 2      * 内部保存
 3      * @param v
 4      */
 5     public void internalSave(View v) {
 6         String name = etName.getText().toString().trim();
 7         String age = etAge.getText().toString().trim();
 8         if (TextUtils.isEmpty(name) || TextUtils.isEmpty(age)) {
 9             return;
10         }
11 
12         try {
13             String content = "这是我的姓名:" + name + "这是我的年龄:" + age;
14             FileOutputStream fos = openFileOutput(sname, MODE_PRIVATE);
15             fos.write(content.getBytes());
16             fos.close();
17             etName.setText("");
18             etAge.setText("");
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23 
24     /**
25      * 内部读取
26      * @param v
27      */
28     public void internalRedo(View v) {
29         try {
30             FileInputStream fis = openFileInput(sname);
31             byte[] buffer = new byte[fis.available()];
32             fis.read(buffer);
33             fis.close();
34             String content = new String(buffer);
35             Toast.makeText(this, content, Toast.LENGTH_SHORT).show();
36         } catch (IOException e) {
37             e.printStackTrace();
38         }
39     }
40 
41     /**
42      * 删除文件
43      * @param v
44      */
45     public void internalDel(View v){
46         boolean del=deleteFile(sname);
47         if(del){
48             Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
49         }else{
50             Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show();
51         }
52     }

External Storage

在外部存储中,需要在

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android进程间通信(一):AIDL使.. 下一篇安卓开发笔记(十九):异步消息..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目