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数据存取的更多相关文章

  1. android数据存取的四种方式

    Android系统下有四种数据的存在形式,分别是SQLite,SharePreference,File,ContentProvider.一:特性介绍:SQLite:对于大多数开发者而言,这应该是大家非 ...

  2. Android 数据存取

    Android提供了Preference(配置),File(文件),SQLite数据和网络几种数据存取方式 SharedPreference提供了一种轻量级的数据存取方法,应用场合主要是比较少的配置信 ...

  3. Android——数据的存储和访问

    1.数据文件的存取操作 我们可以将数据存取在Android应用数据的默认存储地址,其地址为:安装包/data/data/<package name>/files/ 1)向文件中写入数据 p ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  5. 【Android开发日记】之入门篇(八)——Android数据存储(下)

    废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...

  6. Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...

  7. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  8. JavaScript数据存取的性能问题

    JavaScript中四种基本的数据存取位置: 字面量:只代表自身 字符串.数字.布尔值.对象.函数.数组.正则,以及null和undefined    快 本地变量:var定义的    快 数组元素 ...

  9. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

随机推荐

  1. scrapy 的response 的相关属性

    Scrapy中response介绍.属性以及内容提取   解析response parse()方法的参数 response 是start_urls里面的链接爬取后的结果.所以在parse()方法中,我 ...

  2. oracle静默安装完成后,重启数据库,错误ORA-01102: cannot mount database in EXCLUSIVE mode

    静默安装oracle完成后,登录数据库激活用户,无法更改,提示未载入数据库,关闭后重启报错: 1.找到安装目录下的$ORACLE_HOME/dbs/ 目录下,查看当前使用lkORCL文件的用户(fus ...

  3. 《手把手教你》系列技巧篇(三十九)-java+ selenium自动化测试-JavaScript的调用执行-上篇(详解教程)

    1.简介 在做web自动化时,有些情况selenium的api无法完成,需要通过第三方手段比如js来完成实现,比如去改变某些元素对象的属性或者进行一些特殊的操作,本文将来讲解怎样来调用JavaScri ...

  4. 力扣 - 剑指 Offer 59 - I. 滑动窗口的最大值

    题目 剑指 Offer 59 - I. 滑动窗口的最大值 思路1(单调队列) 使用单调(递减)队列,保持队列中的元素是递减顺序,队列头保存的是当前窗口中最大的元素 首先先模拟建立第一个窗口,同时获取第 ...

  5. Obsidian中如何记录自己的灵感?

    在生活中当中你是否会在某个瞬间产生一个想法,但没过多久就想不起来了,正所谓灵感转瞬即逝,那我们不妨在灵感出现的时候顺手将他记录下来.记录的过程要求简单.方便且不会花费我们太多时间,下面我们介绍一下如何 ...

  6. 论文解读(DeepWalk)《DeepWalk: Online Learning of Social Representations》

    一.基本信息 论文题目:<DeepWalk: Online Learning of Social Representations>发表时间:  KDD 2014论文作者:  Bryan P ...

  7. [bzoj1576]安全路径

    先建立最短路径树(即跑dij每一个点向更新他的点连边),考虑一个点的答案路径一定要走过且仅走过一条非树边,枚举非树边(x,y),对于一个点k,如果它在x~lca上(y~lca的路径上同理),那么答案可 ...

  8. [noi34]palindrome

    分割实际上就是不断地从两端取出一样的一段,并对剩下的串进行分割.下面我们来证明一下每一次贪心取出最短一段的正确性: 考虑两种分割方式,分别表示成S=A+B+A和S=C+D+C,其中A就是最短的一段,那 ...

  9. [cf516E]Drazil and His Happy Friends

    令$d=\gcd(n,m)$,存在$x$和$y$使得$xn+i=ym+j$的充要条件是$i\equiv j(mod \ d)$,因此将$xd+i$(其中$0\le i<d$)作为一组,共有$d$ ...

  10. Study Blazor .NET(三)组件

    翻译自:Study Blazor .NET,转载请注明. 关于组件 blazor中组件的基础结构可以分为以下3部分, //Counter.razor //Directives section @pag ...