很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("123.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。
另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。
如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如:有个<package name>为cn.itcast.action的应用使用下面语句创建了preference。
getSharedPreferences("123", Context.MODE_WORLD_READABLE);
其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference ,访问preference时会在应用所在包下的shared_prefs目录找到preference :
如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data/<package name>/shared_prefs/itcast.xml”);//<package name>应替换成应用的包名
代码如下:
package com.cyh.service;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
/**
* 软件参数保存
* @author Administrator
*
*/
public class PreferenceService {
private Context context;
public PreferenceService(Context context){
this.context = context;
}
/**
* 保存参数
* @param name
* @param age
* @throws Exception
*/
public void save(String name , Integer age) throws Exception{
SharedPreferences preference = context.getSharedPreferences("sclead", Context.MODE_PRIVATE);
Editor editor = preference.edit();
editor.putString("name", name);
editor.putInt("age", age);
editor.commit();//把数据提交会文件
}
/**
* 获取各项配置参数
* @return
*/
public Map<String, String> getPreferences(){
Map<String, String> maps = new HashMap<String, String>();
SharedPreferences preference = context.getSharedPreferences("sclead", Context.MODE_PRIVATE);
maps.put("name", preference.getString("name", ""));
maps.put("age", String.valueOf(preference.getInt("age", 0)));
return maps;
}
}
分享到:
相关推荐
本文实例讲述了Android使用SharedPreferences存储数据的实现方法。分享给大家供大家参考,具体如下: 编辑短信的时候,突然接收到电话,通过这种方式可以保存之前已经编辑好的短信内容 @Override public void ...
6. 数据存储:Android 提供了多种数据存储方式,包括 SQLite 数据库、文件存储、SharedPreferences 等。 7. 网络通信:Android 支持多种网络通信方式,包括 HTTP、TCP、UDP 等。 8. 社交媒体集成:Android 提供了...
数据储存与文件操作、对话框、通知、菜单、 LoaderManager异步加载、多线程(AsyncTask与Handler)、 百度地图等十五个模块,一共102集。 本网盘分享章节编号是按照视频更新的先后顺序编号的,具体学习可参考如下...
工程目录说明: ...repository:数据仓库,包括网络接口请求数据,sqlite数据库,文件File存储,SharedPreferences数据存储。 view:视图层,包含Activiy+Fragment类。 viewmodel:控制层。 utils:工具模块。
5. 第四章介绍了几种数据存储方式,如文件、SharedPreferences、SQLite数据库等。 6. 第五章进阶讲解了ListView的使用、BaseAdapter自定义适配器、Fragment等UI开发高级内容。 7. 第六章讲解了内容提供者的概念及...
4.4.1 秘诀35:在表格布局中使用图像按钮 83 4.4.2 秘诀36:使用复选框和开关按钮 86 4.4.3 秘诀37:使用单选按钮 90 4.4.4 秘诀38:创建下拉菜单 90 4.4.5 秘诀39:使用进度条 92 4.4.6 秘诀40:使用拖动条 94 ...
文章目录一、SharedPreferences1、特点:存储量小,时间持久2、SharedPreferences操作模式3、SharedPreferences的使用SharedPreferences演示ShareActivity(存储信息)ShareActivity(添加读取信息相关代码)二、 ...
10.2 SharedPreferences(键值数据存储) 10.3 SQLite语法 10.4 SQLite数据操作 10.4.1 SQLLiteOpenHelper类 10.4.2 数据库表的增删改查 10.4.3 分页查询 10.5 SQLite事务支持 10.6 Content Providers(数据共享) ...
这是一个SharedPreferences人使用样例,SharedPreferences主要是存储一些简单的基本数据类型在xml文件中,并且采用内容观察者模式来监听数据变化,从而进行相应的操作。详细说明网址:...
熟悉掌握Android数据存储(文件、SQLite、SharedPreferences等) 熟练处理Android中的OOM、ANR异常 熟悉使用分享、推送、及第三方支付等功能的 SDK 熟悉阿里百川即时通讯、环信即时通讯 工作经历 ABC有限公司 ( 2017...
*运用SharedPreferences文件存储功能* *运用库Retrofit发送网络请求解析数据 *运用Material*Design进行UI界面开发 *运用Glide库进行网络图片读取 *网络数据实现双向绑定* *运用腾讯云消息推送机制 *运用腾讯云云短信...