如何正确的使用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/<package name:="">/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/<packagename>/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使用建议 ...