Android Data Storage(数据存储)之SharedPreferences
来源:互联网 发布:中二网络意思 编辑:程序博客网 时间:2024/05/29 17:44
SharedPreferences类提供了一些大体框架,允许你保存和获取由基本数据类型组成的持久键值对。你能使用SharedPreferences保存一些基本数据:booleans, floats, ints, longs, and strings.这些数据将持久存在用户的会话(甚至你的应用程序被杀死)
对于SharedPreferences类的描述:
/**
* Interface for accessing and modifying preference data returned by {@link
* Context#getSharedPreferences}. For any particular set of preferences,
* there is a single instance of this class that all clients share.
* Modifications to the preferences must go through an {@link Editor} object
* to ensure the preference values remain in a consistent state and control
* when they are committed to storage.
*
* <p><em>Note: currently this class does not support use across multiple
* processes. This will be added later.</em>
*/用于访问和修改Context.getSharedPreferences(String, int)返回的偏好设置数据的一个接口。对于任何一个特殊的
preferences,所有客户端共享这个此类单一的实例。修改preferences必须通过SharedPreferences.Editor 对象,以
确保当他们提交存储数据操作时,preferences值保持一致状态。
注意:目前,这个类不支持多线程访问,留待以后添加。
使用两种方法其中之一,可以获取你应用程序的SharedPreferences对象:
1、getSharedPreferences(String, int) -- 使用此方法你需要多个preferences文件中指定文件名,也就是指定的第一个参数。
2、getPreferences() -- 使用此方法如果在你的Activity中只需要一个preferences文件,因为这将是唯一的preferences文件在你的Activity中,你不需要提供名称。
获取SharedPreferences对象后,就是写入值:
1、 回调edit()获取一个SharedPreferences.Editor对象
2、 添加值方法比如:putBoolean()/putString()
3、 提交新值对象调用commit()方法
核心原理:
保存基于XML文件存储的Key-Value键值对数据,通常用来存储一些简单的配置信息。通过File Explorer,SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下
如下图:
SharedPreferences对象本身只能获取数据不支持存储和修改,存储修改是通过SharedPreferences.Edit对象实现的。SharedPreferences本身是一个接口程序,无法直接创建SharedPreferences实例,只能通过提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences对象,该方法中name表示要操作的xml文件名,第二参数具体如下:
Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写。
Editor主要方法:
SharedPreferences.Editor clear(): 清空SharePreferences所有数据
SharedPreferences.Editor putXxx(String key,String value): 向SharedPreferences存入指定key对应的数据,其中Xxx为基本数据类型:boolean,int,float等或String,StringSet
SharedPreferences.Editor remove(String key): 删除SharedPreferences指定key对应的数据项
boolean commit(): 当Editor编辑完成后,提交修改。
// 记录存储数据类 public class RmsDataBase { private String dbname_; private Activity app_; private SharedPreferences store_; public RmsDataBase(Activity app, String dbName) { this.dbname_ = dbName; this.app_ = app; this.store_ = app_.getSharedPreferences(dbname_, Context.MODE_PRIVATE);// this.store_ = app_.getSharedPreferences(dbname_, Context.MODE_WORLD_READABLE); // 其他程序可以访问读取 } public String getDBName(){ return dbname_; } /** * 移除数据表 */ public void deteleDB(){ store_.edit().remove(dbname_); } /** * 获取数据 * @param key * @return */ public String get(String key) { String value = null; try { value = store_.getString(key, ""); } catch (Exception e) { e.printStackTrace(); } finally {} return value; } /** * 存储键值对 * @param key * @param value */ public void save(String key, String value) { try { SharedPreferences.Editor editor = store_.edit(); editor.putString(key, value); editor.commit(); } catch (Exception e) { e.printStackTrace(); } finally {} } /** * 删除键值对 * @param key */ public void delete(String key) { try { SharedPreferences.Editor editor = store_.edit(); editor.remove(key); editor.commit(); } catch (Exception e) { e.printStackTrace(); } finally {} }}
// 对数据进行处理测试public class MainActivity extends Activity { LinearLayout ll_; RmsDataBase rmsDB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_sharedpreferences); ll_ = (LinearLayout) findViewById(R.id.ll_content); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { addData(); } }); findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getData(); } }); rmsDB = new RmsDataBase(this, getLocalClassName()); // 调用其他应用程序的SharedPreferences文件 /*try { Context context = createPackageContext("访问应用程序包名", CONTEXT_IGNORE_SECURITY); SharedPreferences sp = context.getSharedPreferences("访问应用程序的文件名", Context.MODE_WORLD_READABLE); // ...其他都一样 } catch (NameNotFoundException e) { e.printStackTrace(); }*/ } public void addData(){ System.out.println("------ >>>> " + rmsDB.getDBName()); rmsDB.save("name", "john"); rmsDB.save("age", "18"); } public void getData(){ String name = rmsDB.get("name"); String age = rmsDB.get("age"); System.out.println("------ >>>> " + name); System.out.println("------ >>>> " + age); }}
读写其他应用程序的SharedPreferences:
1、在创建SharedPreferences时、指定
MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE,表明可读取,写入
this.store_ = app_.getSharedPreferences(dbname_, Context.MODE_WORLD_READABLE); // 其他程序可以访问读取
2、创建其他程序对应的Context:
Context context = createPackageContext("访问应用程序包名", Context.CONTEXT_IGNORE_SECURITY);
3、使用访问程序的Context获取SharedPreferences对象
SharedPreferences sp = context.getSharedPreferences("访问应用程序的文件名", 1);
4、 其他操作同操作自己应用程序SharedPreferences一样
0 0
- Android Data Storage(数据存储)之SharedPreferences
- Android Data Storage(数据存储)之Internal Storage
- Android Data Storage(数据存储)值External Storage
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android--数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android之数据存储SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之--------- SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android----数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化
- 用SignalR 2.0开发客服系统[系列1:实现群发通讯]
- unbuntu虚拟机上搭建伪分布式hadoop
- [MSSQL]SQL Server善用LOG10 和POWER 函數
- Windows + Git(msysgit) + TortoiseGit
- Android Data Storage(数据存储)之SharedPreferences
- 用SignalR 2.0开发客服系统[系列2:实现聊天室]
- 神经网络简史
- Redhat XFS File System Guide
- Android开发之RecyclerView的上拉刷新和下拉加载
- 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
- poj 2010
- dede在首页调用文章页全部内容的方法
- Java中的常量、静态域与静态方法