问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何正确的使用SharedPreferences

发布网友 发布时间:2022-04-29 23:34

我来回答

1个回答

热心网友 时间:2022-06-26 01:21

关于SharedPreferences顺便再复习一下:

SharedPreferences 是Android 中的内置API,它允许我们存取键值对形式的基础类型数据,像:boolean,float ,int , long , string 。这些数据将会持久化的存在,即使你的应用程序结束之后(注意:如果应用从手机上写在掉后,该程序对应的SharedPreferences将会消失,保存在路径:/data/data/<package_name>/shared_prefs 目录下)

注意:User Preferences 用户配置

严格来说,SharedPreferences最好不要用来保存“用户配置”,比如,用户选择了什么铃声,是否自动更新等等。如果要为应用创建用户配置,可以使用PreferenceActivity,它可以用来创建“用户配置”。(PreferenceActivity用来创建程序中的设置界面)

如何在应用程序中获取SharedPreferences呢?有两个方法:

getSharedPreferences(name , mode) - 如果你的应用需要多个preferences文件可以使用该方法。该方法的第一个参数,用来区别不同的preferences文件。
比如:

SharedPreferences sp1 = getSharedPreferences("sp_1" , Context.MODE_PRIVATE);
SharedPreferences sp2 = getSharedPreferences("sp_2" , Context.MODE_PRIVATE);
是同一个应用程序的两个不同的配置文件。

该方法的第二个参数支持如下几种值:
Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序或者是拥有相同user ID的应用读、写。

Context.MODE_WORLD_READABLE :指定该SharedPreferences数据能被其它应用程序读,但不能写。
这个变量在API 17以后已经不建议使用了。创建全局可读文件是非常危险的事,这样会引起程序的安全漏洞。程序之间的交互应该更多的使用正规的途径,比如:ContentProvider, BroadcastReceiver, and Service.当程序通过备份和恢复后,并不能保证这种获取方式依然对该文件有效。文件创建模式:允许所有的其它程序来读取创建的文件。
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其它应用程序读,写。

这个变量在API 17以后已经不建议使用了。创建全局可写文件是非常危险的事,这样会引起程序的安全漏洞.程序之间的交互应该更多的使用正规的途径,比如:ContentProvider, BroadcastReceiver, and Service.当程序通过备份和恢复后,并不能保证这种获取方式依然对文件有效。文件创建模式:允许所有的其它程序来修改创建的文件。

Context.MODE_MULTI_PROCESS
在API11中添加,SharedPreferences加载标记:被设置后,在硬盘上的文件在被修改是将会被检查如果当前的SharedPreferences实例已经被加载进进程后。这种情况通常发生在,当程序有多个进程在修改同一个SharedPreferences文件的时候。通常来说这种方式在进程之间交互表现是非常好的。

在API 2.3之前,发布release版本时,这个标记是默认存在的,当发布release版本时。对于使用2.3以上的sdk进行编译的时候,如果想使用那么
必须明确的设置。

getPreferences() - 如果你的Activity仅仅需要一个preferences文件可以使用这个方法。因为你的Activity只要一个preferences文件,所以不需要提供名字。

如何往SharedPreferences中写数据呢?

1、需要获取SharedPreferences的编辑对象即:SharedPreferences.Editor : 使用 edit()。
比如:SharedPreferences.Editor editor = sp1.edit();
2、使用putXXX()方法,向preferences写入数据:
比如:editor.putXXX(“key” , value);
3、向preferences文件中提交数据:
比如:editor.commit();

如何读取数据呢?
使用方法getXXX()等方法读取。
比如:
boolean silent = settings.getBoolean("silentMode", false);

下面是Google doc提供的一个demo:
[java] view plain copy print?
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";

@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .

// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}

@Override
protected void onStop(){
super.onStop();

// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);

// Commit the edits!
editor.commit();
}
}

接下来看Google doc 中关于sharedpreferences的文档。

SharedPreferences 本身是一个接口,用来获取和修改程序的配置数据,位于:android.content.SharedPreferences。程序无法直接创建SharedPreferences实例,只能通过conext的getSharedPreferences(String, int)的获取接口实例。

注意:当前类不支持跨进程调用,将会在之后的版本中支持。

它提供了如下方法来访问perferences数据:

boolean contains(String key) :判断当前preferences是否包含key所对应的数据。

abstract SharedPreferences.Editor edit():为preferences创建一个新的Editor,因此你可以修改preferences的数据并且提交给SharedPreferences对象。

abstract Map<String, ?> getAll() :获取preferences中所包含的所有数据。

abstract XXX getXXX(String key, boolean defValue):获取perferences里指定的key对应的value。如果该key不存在,则返回默认defValue .其中XXX是基础数据类型:boolean、float、int、long、String等。

SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取它所对应的Editor对象。

Editor提供了如下方法来写向perferences入数据:

abstract SharedPreferences.Editor clear()
在Editor中标记出:清除所有preferences保存的数据。(注意此方法并没有实质性的清除,只是在Editor上进行了标记,需要commit后才可以进行真正的清除)

abstract boolean commit():
将Editor对preferences的修改提交给SharedPreferences对象,完成对preferences中数据的修改。

abstract SharedPreferences.Editor putXXX(String key, boolean value)
向preferences中存入key及其所对应的数据 <key-value>。其中xxx可以是boolean、float、int、long、String等各种基本类型的数值。

abstract SharedPreferences.Editor remove(String key):
在Editor中标记出preference中以key以键的键值对应该被移除,而实际的移除动作将会在commit()执行之后才会作用于真正的preferences。

如何读取其它应用的SharedPreferences:

如上所述,如果想读、写其它应用的SharedPreferences,前提是创建该SharedPreferences的应用程序指定相应的访问权限,例如指定了MODE_WORLD_READABLE , 这表明该SharedPreferences可被其它应用程序读取。指定了MODE_WORLD_WRITEABLE,这表明该SharedPreferences可被其它程序写入。

为了读取其它程序对应的Context,可按照如下步骤进行:
1、需要创建其它程序对应的Context,例如如下代码:
Context userCount = createPackageContext(“com.sharedpreferencesdemo.zhanggeng” , Context.CONTEXT_IGNORE_SECURITY);

上面的程序中:com.sharedpreferencesdemo.zhanggeng 就是其他程序的包名——实际上Android系统就是用应用程序的报名来作为程序的标识的。
2、调用其它程序的conext的getSharedPreferences(String name , int mode) 即可获取相应的SharedPreferences对象。
3、调用SharedPreferences的edit()方法获取相应的Editor即可。
在sharedpreferences的方法中,使用( )方法可以得到一个编辑器editor对象...

1. 获取Editor对象:通过调用SharedPreferences对象的edit方法,可以获取到一个Editor对象。这个Editor对象提供了向SharedPreferences中写入数据的方法。2. 写入数据:一旦获得了Editor对象,就可以使用其提供的方法来存储不同类型的数据。3. 提交更改:在写入数据后,必须调用Editor对象的commit方法或apply方法来提...

Load Port、SMIF

威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...

如何正确的使用SharedPreferences

1、需要获取SharedPreferences的编辑对象即:SharedPreferences.Editor : 使用 edit()。比如:SharedPreferences.Editor editor = sp1.edit();2、使用putXXX()方法,向preferences写入数据:比如:editor.putXXX(“key” , value);3、向preferences文件中提交数据:比如:editor.commit();如何读取数据呢?使...

SharedPreferences 使用

1.Context的 getSharedPreferences(String name, int mode) 。 name为文件的名称,如果指定的文件不存在则会创建一个,文件都是存放在/data/data/&lt;package name:=""&gt;/shared prefs目录下的。mode指定操作模式,目前只有MODE_PRIVATE这一种模式可选,也是默认的操作模式,与直接传入0效果是相同的,表示...

如何正确的使用SharedPreferences

// 从共享首选项中提取数据 SharedPreferences settings = getSharedPreferences("UserBean", MODE_PRIVATE);String value=settings.getString("userName", null);客户端获取里数据后可以通过Post方法发送至服务器端,这就要使用Http协议了,这方面的资料度娘也懂~~~

SharedPreferences

SharedPreferences只能存储少量数据,大量数据不能使用该方式存储,支持存储的数据类型有booleans, floats, ints, longs, and strings。SharedPreferences存储到一个XML文件中的,路径在 /data/data/&lt;packagename&gt;/shared_prefs/ 下,文件名以及存储后面详细讲述。首次启动引导页、自动登录、记住密码、推送消息...

SharedPreferences 内部原理浅析

1、调用 getSharedPreferences();创建一个 SharedPreferences 对象,其中会先判断是否存在对 应 xml 文件,如果发现存在则会有一个预加载操作,这个操作是把 xml 文件的内容通过 I/O 操作和 XmlUitl 解析后存入一个 map 对象中,所以我们调用 SharedPreferences::getString();等 get 操作实际上是不会对...

如何在android中利用shared preferences存储和读取数据

第一步:新建一个Android工程,命名为SharedPreferencesWrite。第二步:在layout下添加一个使用线性布局的布局文件,命名为:main.xml。布局文件源代码:http://www.worlduc.com/blog2012.aspx?bid=19403636 第三步:在CopySharedPreferencesTest.java下声明如下变量,并导入导入相关包(如何使用SharedPreferences...

如何选择最佳的存储方式

1. 如果你有键值对形式的数据,使用SharedPreferences对象。举个例子,如果你想存储用户的一些属性,比如名字,肤色,生日或最后的登陆日期,那么SharedPreferences对象就是存储这些数据的最佳方式。2. 如果你想存储某些特殊的数据,那么使用内部存储将是一个好的选择。举个例子,你的应用(例如RSS阅读器)可能...

数据存储和读取该怎么实现

第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。以下为示例代码:public...

SharedPerferences简介

String等类型数据的保存接口,使用键值对的方式来进行数据存储,SharedPreferences文件是使用XML格式来对数据进行管理的,保存在在/data/data/(packageName)/shared_prefs目录下。SharedPerferences存储的特点:SharedPreferences的四种操作模式:获取SP(SharedPerferences)的方法:存储内容:读取内容:SP使用建议 ...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
朗风空气净化器怎么样 诺基亚有没有一种机型是表面看是老手机但是翻开来就是智能手机还是全键... 诺基亚有没有一款采用塞班第五版系统,同时有键盘的手机,不要像E63的... 让手机可以随时接听固定电话的来电,那个业务怎么办理 请问女生学物流管理好找工作吗?具体需要哪方面的能力呢?哪方面需要加强... 女生适合学物流管理吗? fail url not in domain list,怎么回事 7.1声卡哪个好 word方框里打√符号 用x5做视频,怎么在两个片段间添加照片?? 北冰洋深度有多深? 北极属于哪一个大洲? 初一地理关于北极的知识 1描述北极地区的地理位置 北极一片什么十分寒冷填词语? 南极和北极1圈多少度 一个关于北极的电影 北极1号黄瓜怎么样? 如何判断一款葡萄酒的品质? 国家对葡萄酒酒精度有明确规定多少度吗 葡萄酒国家标准葡萄酒的酒精度数是怎么规定的 国产葡萄酒GB15037与GB15037_2006的标准有什么区别? 红酒gbt15037代表什么意思- 问一问 葡萄酒gb/t27586是勾兑的吗 勾兑葡萄酒与酿造葡萄酒的执行标准 腾讯模拟器玩吃鸡怎么才能调整位置快速奔跑? 做梦梦到鬼问我和我老公要东西吃 绝地求生加速跑不能跳怎么办 绝地求生加速跑不能跳 绝地求生大逃杀人物向一个方向无限跑怎么办? 女人做梦梦见几个小鬼吃饭 centos7下oracle导出表出错 高尔夫6仪表盘怎么使用 高尔夫6保养灯怎么消 高尔夫6ESP如何使用 高尔夫71.4舒适隐藏功能设置 高尔夫6 定速巡航怎么用? 高尔夫6电子版说明书(附图说明)就是那些按钮是做说明用的说明书 高尔夫6 有哪些隐藏功能 一一道来 ODIS+5054设置高尔夫7隐藏功能 高三毕业生老师评语 400字左右 高尔夫6上的usb接口怎么用 高尔夫6怎么链接手机蓝牙 高尔夫6外门把手拆卸教程 高尔夫6如何打开远光灯 华为手机指纹解锁坏了还在三包的时间内可以免费修吗? 华为x9 手机的开关键也是指纹键,坏了可以修好吗? 如何正确地使用电视、网络等媒体 如何正确使用百度知道 如何正确的使用百度 盛和资源2021目标价怎么样?盛和资源股票最新股吧?2021盛和资源分红派息时间表?
  • 焦点

最新推荐

猜你喜欢

热门推荐