Android存储之SharedPreferences
来源:互联网 发布:保修系统源码 编辑:程序博客网 时间:2024/06/08 13:12
一 . 应用场景
有些时候,应用有少量的数据需要保存,而这些数据的格式非常简单:都是一些字符串、标量类型的值等,比如应用程序的各种配置信息(如是否打开音效、是否使用振动效果等),对于这些数据,android提供了SharedPreferences进行保存,这点与iOS中的NSUserDefaults(偏好设置)类同.
二. SharedPreferences简介
SharedPreferences保存的数据基本上都是些配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对.
SharedPreferences是个接口,主要负责读取应用程序的Preferences数据,他提供了以下常用方法来访问SharedPreferences中的key-value对:
boolean contains(String key) : 判断SharedPerferences是否包含特定key值得数据
abstract Map<String, ?> getAll() : 获取SharedPerferences全部键值对
boolean getXXX(String key, XXX defValue) : 获取SharedPerferences数据里指定的key对应的value. 如果该key不存在,返回默认值defValue.其中XXX可以是boolean,int,float,long,String等类型.
SharedPreferences接口本身没有提供任何写入数据的能力,但是其内部存在一个接口,SharedPerferences调用edit()方法即可获取对应的Edit对象.Edit对象提供了如下方法来向SharedPreferences写入数据:
clear() : 清空SharedPreferences中所有数据
putXXX(String key, XXX value) : 向SharedPreferences中存入指定key对应的数据.其中XXX可以是boolean,int,float,long,String等类型
remove(String key) : 删除SharedPreferences中key对应的value
commit() : 当Edit编辑完成后,调用该方法提交修改
总结:SharedPerferences负责根据key读取数据,而SharedPerferences.Editor则用于写入数据.
SharedPreferences本身是个接口,我们通常通过Context提供的getSharedPreferences(String name, int mode) 方法来获取SharedPreferences实例,该方法第二个参数支持如下几个值:
Context.MODE_PRIVATE : 只能被本应用程序读、写
Context.MODE_WORLD_READABLE : 能被其他应用程序读,只读形式的,不能写
Context.MODE_WORLD_WRITEABLE : 能被其他应用程序读写
三. Demo分享
3.1 简单构建一个小项目,两个按钮,写入数据按钮,和读取数据按钮:
3.2 MainActivity代码:
package com.example.sharedpreferencestest;import android.os.Bundle;import android.app.Activity;import android.content.SharedPreferences;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity { SharedPreferences shared; SharedPreferences.Editor editor; Button writeBtn, readBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); writeBtn = (Button) findViewById(R.id.write_data); readBtn = (Button) findViewById(R.id.read_data); // 需要解释一下的是,MODE_WORLD_READABLE之所以过时(deprecated)的原因: // 众所周知,google对android的安全性方面的一直在提升中, // 考虑到将文件定义为MODE_WORLD_RAEDBLE是不安全的,而且是没有必要的 // 如果你实在想使一个文件能够被别的应用访问,请使用**FileProvider** shared = getSharedPreferences("test", MODE_WORLD_READABLE); // 为写入按钮设置监听事件 writeBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 获取Edit editor = shared.edit(); // 写入数据 editor.putString("name", "weiwosuoai"); editor.putInt("age", 18); editor.putString("wifeName", "code"); editor.putString("name", "weiwosuoai2");// // 删除指定key的value值// editor.remove("age"); editor.commit(); } }); // 为读取按钮设置监听事件 readBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "name : " + shared.getString("name", "no-result") + " age : " + shared.getInt("age", 0) + " wifeName" + shared.getString("wifeName", "no-result") + " result" + shared.getString("result", "no-result"), 1).show(); } }); }}
3.3 activity_main.xml代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/write_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="写入数据"/> <Button android:id="@+id/read_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="读取数据"/></LinearLayout>
点击“写入数据”按钮后,我们可以在DDMS中File Explorer中的data/data/你的应用唯一标识/shared_prefs目录中看到保存的test.xml文件:
点击导出按钮,打开导出的文件test.xml,我们可以看到:
代码中写的数据的确保存的文件中了,O(∩_∩)O哈哈~
同时,当我们点击读取数据按钮,可以看到Toast能够拿到正确的数据:
- 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
- android数据存储之--------- SharedPreferences
- Android数据存储之SharedPreferences
- Android数据存储之SharedPreferences
- 数据库大赛提到的知识点汇总
- 一个不错的源码分享网站
- Hibernate 配置使用线程报错org.hibernate.HibernateException: createCriteria is not valid without active trans
- JQ表单选择器
- 微信公众平台服务号与订阅号区别详解
- Android存储之SharedPreferences
- Unity小地图制作(二)
- 微信开发相关内容
- background:url的用法
- 武國平UL.KUOPIGN向日之方中申請:请錫我鼒AND終身YALE教授
- 【iOS】自定义控件入门:可拖动的环形进度
- Android开发之详解五大布局
- HDU 1257(最少拦截系统)最长不降子序列
- Http详解