一、 SharedPreferences

1 使用SharedPreference进行数据的存贮

很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件或者xml进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<packagename>/shared_prefs目录下:

SharedPreferencessharedPreferences= getSharedPreferences("itcast",Context.MODE_PRIVATE);

Editoreditor= sharedPreferences.edit();//获取编辑器

editor.putString("name","andy");

editor.putInt("age",4);

editor.commit();//提交修改

生成的andy.xml文件内容如下:

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>

<map>

<stringname="name">andy</string>

<intname="age" value="4" />

</map>

因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,这四种模式前面介绍使用文件方式保存数据时已经讲解过。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

另外Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

2 使用SharedPreferences数据的读取

访问SharedPreferences中的数据代码如下:

SharedPreferencessharedPreferences= getSharedPreferences("andy",Context.MODE_PRIVATE); //设置的文件类型问本app访问

//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值

Stringname = sharedPreferences.getString("name","");

intage = sharedPreferences.getInt("age",1);

如果访问其他应用中的Preference,前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如:有个<packagename>为cn.itcast.action的应用使用下面语句创建了preference。

getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);

其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference ,访问preference时会在应用所在包下的shared_prefs目录找到preference :

ContextotherAppsContext= createPackageContext("cn.andy.action",Context.CONTEXT_IGNORE_SECURITY);

SharedPreferencessharedPreferences= otherAppsContext.getSharedPreferences("andy",Context.MODE_WORLD_READABLE);

Stringname = sharedPreferences.getString("name","");

intage = sharedPreferences.getInt("age",0);

如果不通过创建Context访问其他应用的preference,也可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:

File xmlFile =new File(“/data/data/<package name>/shared_prefs/andy.xml”);//<packagename>应替换成应用的包名

3 详细代码如下:

1 在MainActivity中保存SharedPreferences

package com.andy.sharedpreference;import java.util.Map;import com.andy.sharedpreference.R;
import com.andy.service.PreferenceService;import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends ActionBarActivity {private EditText nameText;private EditText ageText;private PreferenceService preferenceService;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);nameText = (EditText) findViewById(R.id.name);ageText = (EditText) findViewById(R.id.age);preferenceService = new PreferenceService(this);Map<String, String> params = preferenceService.getSharedPerence();nameText.setText(params.get("name"));ageText.setText(params.get("age")); }//对应android:onClick 处的方法public void save(View view) {String name = nameText.getText().toString();String age = ageText.getText().toString();preferenceService.saveSharedPreference(name, Integer.valueOf(age));//Toast  一定要调用show 才显示Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

2  PreferenceService实现读取和保存

package com.andy.service;import java.util.HashMap;
import java.util.Map;import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;public class PreferenceService {private static final String TAG = "PreferenceService";private Context context;public PreferenceService(Context context) {super();this.context = context;}/*** 保存sharedPerence* * @param name* @param age*/public void saveSharedPreference(String name, Integer age) {Log.i(TAG, "设置sharedPreference");// sharedPreference 保存文件是以xml类型 而且后缀系统自动添加SharedPreferences sharedPreferences = context.getSharedPreferences("andy", Context.MODE_PRIVATE);// 获取Editor 编辑Editor editor = sharedPreferences.edit();editor.putString("name", name);editor.putInt("age", age);editor.commit(); // 必须commit}public Map<String, String> getSharedPerence() {Log.i(TAG, "获取sharedPreference");SharedPreferences sharedPreferences = context.getSharedPreferences("andy", Context.MODE_PRIVATE);Map<String, String> params = new HashMap<String, String>();params.put("name", sharedPreferences.getString("name", ""));params.put("age", String.valueOf(sharedPreferences.getInt("age", 0)));return params;}
}

Android开发之SharedPreferences相关推荐

  1. Android开发之SharedPreferences的封装

    对于大部分初学者来说,如果想利用SharedPreferences进行数据存储的话大部分人(包括本人)应该会这样: 存储: SharedPreferences sharedPreferences = ...

  2. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  3. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  4. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  5. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  6. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  7. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  8. Android开发之2048安卓版

    之前是在eclipse上写的,后面换成了android sudio. 2048游戏的UI整体可以采用线性布局,即LinearLayout,其中嵌套一个线性布局和一个GridLayout,内嵌的线性布局 ...

  9. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类

    本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...

  10. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

最新文章

  1. 8g ubuntu 树莓派4b_3D 打印制造树莓派 4B 平板电脑
  2. 驳“AJAX 的七宗罪”
  3. ANT不完全总结,包含各种命令,ant例子等,转自:http://lavasoft.blog.51cto.com/62575/87306
  4. C#中Lambda表达式类型Expression不接受lambda函数
  5. U-Boot 图形化配置及其原理
  6. matlab计算大米个数,如何求数组元素的个数 matlab
  7. 学习笔记--asp.net母版页(转自msdn,仅为自己学习存储和有意读者使用)
  8. elasticsearch的keyword与text的区别
  9. oracle复制数据库文件,Oracle备份与恢复系列(四)复制数据库 使用原有的控制文件...
  10. 两种添加数据到DropDownList 控件的方法
  11. mx350显卡天梯图_分享电脑显卡天梯图2020
  12. 【数学与统计基础】常用统计检验方法的Python实现
  13. 计算机电子琴乐谱数字键,电子琴键盘与乐谱对照表.pdf
  14. 开发手札:git日常抽风记录
  15. ps -aux详细解释
  16. 日期与字符串之间的转换
  17. imprecise external abort
  18. java集成seetaface_开源人脸识别seetaface入门教程(一)
  19. 翻出2018的Java84班的二阶段项目-商城项目
  20. TCP/IP 1.概述

热门文章

  1. 极客大学架构师训练营 系统架构 高并发 高可用 垂直伸缩 水平伸缩 第7课 听课总结
  2. 算法:找出相同字母组成的字符串Group Anagrams
  3. 服务器系统更新失败进不了系统,第五人格更新后进不去怎么办 更新连接服务器失败...
  4. php5中使用xslt扩展,.NET_解析在.net中使用XSLT转换xml文档的示例详解,XSL即可扩展的样式表文件。 可 - phpStudy...
  5. python循环捕捉异常_python – 如何在for循环迭代器中捕获异常
  6. multimap容器查找元素的三种方法总结
  7. leetcode88
  8. h3c交换机查看电源和风扇模块序列号
  9. Raki的NLP竞赛topline解读:NBME - Score Clinical Patient Notes
  10. 实现类去实现接口的时候,将接口的注释一起重写出来设置