Android 数据存储(笔记)

Stella981
• 阅读 576

Android 数据存储

Android中数据存储的方式有一下几种:

一.SharedPreferences :

            是一种轻量级的数据存储方式,主要用于保存应用的一些常用配置,以xml 文件的方式存储数据,

            以键值对的方式存取数据。

            SharedPreferences 的类型(MODE):

MODE_PRIVATE :私有类型,只允许本应用使用,这个为默认类型

MODE_APPEND :如果SharedPreferences 文件已经存在,则数据写入这个文件的末尾

MODE_WORLD_READABLE : 允许其他app读取数据 ,这个值在API 17 被废除了(可能为了保护数据安全)

MODE_WORLD_WRITEABLE : 允许其他app写入数据 ,这个也是 在 API 17 废除

获取SharedPreferences 的两种方式:

getSharedPreferences(String name,int MODE);获得的对象可以被同一应用程序下的其他组件共享

getPreferences(); 获得的SharedPreferences对象只能在该Activity中使用.

            保存数据:

            SharedPreferences sp = Context.getSharedPreferences(String name,int MODE);

            SharedPreferences.Editor editor = sp.edit();

            editor.put(String key,String value);

            editor.commit(); 提交数据

            读取数据:

            SharedPreferences sp = Context.getSharedPreferences(String name,int MODE);

String value = sp.get(String key);

二.基于Java IO 方式的 file:

IO操作数据有两种不同的类型:私有的file,存放在data/data/目录下, 另一个是对SDcard操作

           1.私有file:

                保存数据:MODE 和SharedPreferences 一样

                FileOutputStream fo = Context.openFileOutput(String name,int MODE)

                读取数据:

                FileInputStream fi = Context.openFileInput(String name)

            2.对SDCard 的数据进行操作:这里涉及到一个 Environment 类,它是用来管理Android 内部存储和SDcard的

                    其中包含了sdcard的一些字段 表示sd卡当前的状态:

  1. MEDIA_BAD_REMOVAL 在没有挂载前存储媒体已被移除

  2. MEDIA_CHECKING                            正在检查存储媒体

  3. MEDIA_MOUNTED                        存储媒体已挂载,并且挂载点可读写

  4. MEDIA_MOUNTED_READ_ONLY    存储媒体已挂载,但只可读

  5. MEDIA_NOFS                                存储媒体是空白或不支持的文件系统

  6. MEDIA_REMOVED                        存储媒体被移除

  7. MEDIA_SHARED                            存储媒体正在通过USB共享

  8. MEDIA_UNMOUNTABLE               存储媒体无法挂载

  9. MEDIA_UNMOUNTED                   存储媒体没有挂载

                   Environment 中的一些静态方法:

                    获取Android 根目录 File root = Environment.getRootDirectory();

                    获取data目录         File data = Environment.getDataDirectory();

                    获取 Android 下载/缓存内容目录 File file = Environment.getDownloadCacheDirectory();

                    获取SDCard状态 :Environment.getExternalStorageState();

                    获取SDCard根目录:File root = Environment.getExternalStorageDirectory();

                    对SDCard进行数据存取的话,首先获取sdcard 的状态,判断sdcard是挂载,如果挂载了sdcard

                    则获取Sdcard 的根目录,然后和自己创建的文件的目录拼接成一个文件的存放目录,最后用IO即可

                    (这里有个小细节:File类型的量可以和字符串直接用“+”拼接,然后变成字符串)

                    File root = Environment.getExternalStorageDirectory();//获取sdcard根目录

                    File file = new File(root+File.separator+"MyFile.txt");  separator 为路径分隔符

三.SQLite 数据库:

        Android 内置的SQLite是一种轻量级的数据库,SQL数据库的功能它基本都有

        Android操作SQLite涉及到两个类 :

                    SQLiteDataBase :SQLite数据库类,这个类没有构造函数,其对象是通过SQLiteOpenHelper 类获取的

                                    这类具有数据库的增删查改等方法,还可以调用execSQL() 方法来执行标准的SQL语句

                    SQLiteOpenHelper :数据库辅助类,这个类是用来获取已有的数据库 或者 创建新的数据库以及数据库

                                版本号。SQLiteOpenHelper中有两个抽象方法,用于创建数据库中的表格,和升级数据库用                                        的,这两个方法需要用户自己去实现

                创建一个类MyDataBase继承 SQLiteOpenHelper 

                            public MyDataBase(Context context){  构造函数

                                       super(Context context,String dataBaseName,null,int DataBaseVersion);父类构造函数

                                }

                            实现其中的抽象方法:

                            onCreate(SQLiteDataBase db){

db.execSQL(String s);    在次执行SQL语句创建表格

                                }

                            onUpgrade(SQLiteDataBase db,int oldVersion,int newVersion){}   当数据库版本号改变是调用

                                        

    

四.ContentProvider 数据共享:

五.基于 Java Socket/http 的网络存储 :

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这