Android数据存取
Android数据存取
一、SharedPreferencesc存取数据
SharedPreferences是使用键值对的方式来存储数据的,也就是在保存一条数据时,需要给这条数据提供一个对应的键,这样在读取的时候就可以通过这个键把相应的值取出来.
1、获取SharedPreferences
SharePreferences是一个接口,不能直接使用,但可以通过以下两种方法获得:
(1)Context类的getSharePreferences(String name ,ine mode)方法来获得一个SharePreferences对象
此方法接收两个参数,第一个参数用于指定SharedPreference文件的名称,即存储XML文件的名称,如果存在,则会直接引用,如果指定的文件不存在则会创建一个,SharedPreference文件都是存放在 /data/data/<包名>/shared_prefs/存储的XML文件 目录下,第二个参数表示文件的存储模式(该方式创建的XML文件可以被同一个软件的Activity引用)。
文件的几种存储模式:
MODE_PRIVATE:只能被创建这个文件的当前应用访问;若文件不存在会创建文件;若创建的文件已存在则会覆盖掉原来的文件.
MODE_APPEND:只能被创建这个文件的当前应用访问;若文件不存在会创建文件;若文件存在则在文件的末尾进行追加内容.
MODE_WORLD_READABLE:创建出来的文件可以被其他应用所读取,但是不可以写入。
MODE_WORLD_WEITABLE:允许其他应用对其进行写入,也可以读取
MODE_MULTI_PROCESS:表示改文件可以被多个进程同时访问,适用于Android2.3及之后的版本。
(2)调用Activity对象的getPreferences(int mode)方法
该方法有一个参数,表示文件的存储模式,具体模式童第轶中相同,这种方法获得的对象只能被该方法所在的Activity所调用.
SharePreferences要创建一个SharePreferences.Editor类的对象,该类负责具体的写入操作,创建方法使通过SharePreferences类的edit()方法来创建.常用方法:
putBoolean(String key,boolean value)
putString(String key,String value)
putInt(String key,int value)
putFloat(String key,float value)
putLong(String key,long value)
commit();//在执行完各种写入、删除、修改的操作后,通过此方法来正式提交数据,确认存储文件的数据变化
clear();//清除键值对的方法
remove(String key);//删除官集资所对应的值
getAll();//读取存储文件中的所有数据,返回一个Map类型的值,来存放所有的键值对
getBoolean(String key,boolean defValue)
getString(String key,String defValue)
getInt(String key,String defValue)
getFloat(String key,String defValue)
getLong(String key,String defValue)
contains(String key)
registerSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener);//注册监听器,来监听SharePreferences的更改事件,在onCreate()方法中设置
unregisterSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener);//注销监听器,不再监听SharePreferences的更改事件。
2、SharedPreferences存储数据
得到SharedPreference对象之后,就可以开始向SharedPreference文件中存储数据了,主要有三步:
- a.使用SharedPreference对象的edit()方法来获取一个SharedPreference.Editor对象
- b.向SharedPreference.Editor对象中添加数据,比如添加一个布尔型数据就是用putBoolean方法,添加一个字符串就是用putString()方法,以此类推
- c.调用commit()方法将添加的数据提交,从而完成数据存储操作
如:
private SharePreferences sp;
//创建一个SharePreferences接口的实例对象,将生成一个XML名称为demo_01,模式为MODE_PRIVATE
sp=this.getSharedPreferences("demo_01",MODE_PRIVATE);
//通过edit()方法创建一个SharePreferences.Editor类的实例对象
SharePreferences.Editor editor =sp.edit();
//通过putString()方法,将数据存入文件中
editor.putString("name","sssss");
//用commit()方法予以正式提交
editor.commit();
打开文件,可看到如下代码:
<map>
<string name="name">sssss</string>
</map>
删除数据:
editor.clear();//清除数据
查询数据:
String name = editor.getString("name","lisi");
3、从SharedPreferences中读取数据
SharedPreferences对象中提供了一系列的get方法用于读取数据,每种get对应了一种put方法.
get方法接收两个参数,第一个是键,第二个参数是默认值,即当传入的键找不到对应的值时,会以什么样的默认值进行返回.
二、LruCache存取数据
LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法。它把最近使用的对象用“强引用”存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前就从内存中移除。其在API12被引进,低版本可以用support包中的类。
三、SD卡存取数据
android中的内存:保存在内存中的程序和文件是相互关联的,什么意思呢?举个例子,假设你android手机内存中有一个程序叫bb,然后由bb程序创建了一份名叫cc的文件,当你删除bb的时候cc也会应为关联而被删除。像是Shared Preferences或SQLite的内容就是保存到内存储中的,这些保存的内容会随程序的删除而删除用过的同学因该很快能理解。
android中的外存:我们平常在android手机使用的最多的就是外部存储,像是你用相机拍了一张照片,这些一般都是保存到外存中的,这些文件不会因为你删除了程序而不见。
随着android版本的增加一般所谓的sd卡(外存储卡)都变成内置的了。
获取SD卡根目录的方法:
//为真则SD卡已装入
sdCardExist=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if(sdCardExist){
sdDir = Environment.getExternalStorageDirectory();//获取跟目录
//查找SD卡根路径
sdDir.toString();
Log.e("main","得到的根目录路径:"+sdDir);
}
另外一个更灵活的获取外部路径的方法:
File directory_doc = Environment.getExternalStoragePublicDirectory(Environment. DIRECTORY_DOCUMENTS);
//使用这个方法需要传入公共目录的类型如Environment.DIRECTORY_DOCUMENTS
//查看公共目录文档文件的路径
Log.e("main","得到的公共目录:"+directory_doc);
获取路径的其他方法:
DIRECTORY_DOCUMENTS
标准文件目录,可以是用户自定义创建的。Standard directory in which to place documents that have been created by the user.
DIRECTORY_DOWNLOADS
下载目录. Standard directory in which to place files that have been downloaded by the user.
DIRECTORY_MOVIES
影视目录.Standard directory in which to place movies that are available to the user.
DIRECTORY_MUSIC
音乐目录.Standard directory in which to place any audio files that should be in the regular list of music for the user.
DIRECTORY_PICTURES
用户可以获得的图片目录.Standard directory in which to place pictures that are available to the user.
更多内容:https://developer.android.com/reference/android/os/Environment
当你有多个外部存储卡:
File[] files;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);
for(File file:files){
Log.e("main", "得到的全部外存:" +String.valueOf(file));
//便历所有外部存储
}
}
得到内存:
File internal=getFilesDir();
Log.e("main","内存路径:"+internal);
参考博客:
【1】数据存储SharePreferences详解
【2】Android缓存LruCache详解
【3】Android获取SD卡路径/内存的几种方法
Android数据存取的更多相关文章
- android数据存取的四种方式
Android系统下有四种数据的存在形式,分别是SQLite,SharePreference,File,ContentProvider.一:特性介绍:SQLite:对于大多数开发者而言,这应该是大家非 ...
- Android 数据存取
Android提供了Preference(配置),File(文件),SQLite数据和网络几种数据存取方式 SharedPreference提供了一种轻量级的数据存取方法,应用场合主要是比较少的配置信 ...
- Android——数据的存储和访问
1.数据文件的存取操作 我们可以将数据存取在Android应用数据的默认存储地址,其地址为:安装包/data/data/<package name>/files/ 1)向文件中写入数据 p ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider
ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...
- 【Android开发日记】之入门篇(八)——Android数据存储(下)
废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...
- Android数据存储之SQLCipher数据库加密
前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
- JavaScript数据存取的性能问题
JavaScript中四种基本的数据存取位置: 字面量:只代表自身 字符串.数字.布尔值.对象.函数.数组.正则,以及null和undefined 快 本地变量:var定义的 快 数组元素 ...
- Android数据存储方式--SharedPreferences
Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...
随机推荐
- i love dingning
"如果你爱一个人,不是下课给人家买买水,不是短信发来发去,也不是周末一起出来唱唱歌聊聊天吃吃饭,而是做一个出色的人.以后的以后,可能还有别的人爱她,你要做的,是把别人都比下去.你要变得优秀, ...
- 四种 AI 技术方案,教你拥有自己的 Avatar 形象
大火的 Avatar到底是什么 ? 随着元宇宙概念的大火,Avatar 这个词也开始越来越多出现在人们的视野.2009 年,一部由詹姆斯・卡梅隆执导 3D 科幻大片<阿凡达>让很多人认识了 ...
- IDM使用教程:利用IDM下载百度网盘文件
IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...
- 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问
一.介绍 当我们开发基于微服务的应用程序的时候,有一个环节总是跳不过去的,那就是要创建 WebApi,然后,我们的应用程序基于 WebApi 接口去访问.在没有 Swagger 以前,我们开发好了 W ...
- SpringCloud概念
SpringCloud概述 1.SpringCloud是什么? 官方解释: 官网: https://spring.io/projects/spring-cloud/ SpringCloud是一系列 ...
- MySQL高级篇 | MySQL逻辑架构
思维导图 架构逻辑视图 每个虚线框为一层,总共三层. 第一层:连接层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等. 第二 ...
- 怎么将本地已有的一个项目上传到新建的git仓库的方法
将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...
- 02 | 顶层对象和global对象
顶层对象的属性 顶层对象,在浏览器环境指的是window对象,在Node指的是global对象.ES5之中,顶层对象的属性与全局变量是等价的. window.a = 1; a // 1 a = 2; ...
- redis 内存划分
1.数据:作为数据库,数据是最主要的部分,这部分占用的内存会被统计在used_memory中 2.进程内存:redis主进程本身运行需要占用的内存,这部分内存会被统计在used_memory_rss中 ...
- 开源支持东财自动交易的简单量化交易框架pytrader
pytrader是基于 easytrader 和 easyquotation 的量化交易框架,支持东方财富自动交易,支持进行策略回测. 开源地址:https://github.com/jadepeng ...