分类:C#、Android、VS2015;

创建日期:2016-03-05

一、简介

SharedPreferences:简单共享存储首选项。实际上就是用加密的内部文件保存所有页面都能访问的一系列“name/value”组成的数据集合,比如利用它保存系统参数配置等,然后再写个类处理它,并为其规定一些读写权限。

SharedPreferences是Android平台上一种轻量级的数据共享存储方式,一般利用它将应用程序的相关信息(比如应用程序配置、共享配置等)持久性地保存在内部文件系统中,以便程序能自动读取这些信息。当然也可以用它保存你自己的应用程序私有信息,诸如启动欢迎词、用户选择的界面风格等。

Android是通过SharedPreferences类将NVP(Name-Value Pair,即“名称-值”对)保存在内部文件系统中的,而且完全屏蔽了对这种文件的操作过程,就是说,你只能通过SharedPreferences类处理这些数据,无法通过一般的文件操作来读取或写入它。另外,如果NVP具有相同的SharedPreferences,那么它将保存在同一个内部文件中。

这种封装方式的好处是:除了方便系统管理(能利用它实现不同应用程序之间的数据共享)以外,开发人员还可以直接对NVP进行操作,同时,也限制了数据的访问权限,保证了共享数据的一致性和安全性。

SharedPreferences支持以下访问模式:

  • Private:私有模式。只有创建SharedPreferences的应用程序自身才有读取和写入SharedPreferences的权限。
  • WorldReadable:全局读模式。除了创建程序自身有读取和写入权限以外,其他应用程序也有读取的权限,但没有写入的权限。
  • WorldWriteable:全局写模式。所有程序都可以对其进行写入操作,但没有读取的权限。

利用SharedPreferences访问持久性存储的数据时,必须指明采用的是哪种模式。

在继承自Activity的类中,通过当前实例的ContextWraper对象的GetSharedPreferences()方法可获取一个SharedPreferences对象,并在参数中通过Android.Content.FileCreationMode枚举指明是哪种访问模式。例如:

ISharedPreferences p = GetSharedPreferences("mydemos", FileCreationMode.Private);

其中,“mydemos”是要创建或保存的文件名,你可以根据需要创建或保存多个类似这样的文件,只要在这个参数中指定不同的文件名就行了。

得到SharedPreferences对象后,就可以利用该对象的All属性读取这些NVP,也可以利用Edit()方法对其进行修改(需要有对应的权限),修改后调用Commit()方法提交即可。

如果你希望访问其他应用程序共享出来的SharedPreference(前提是它将访问模式设置为包含全局读),通过Context获取对应的SharedPreference对象即可。

二、例19-1—首选项基本用法

运行截图

  

设计步骤

1、添加ch1901Main.axml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:minWidth="25px"
  7. android:minHeight="25px">
  8. <fragment
  9. android:name="MyDemos.MyDemosFragment"
  10. android:tag="mydemos"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content" />
  13. <Button
  14. android:text="写入"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"
  17. android:id="@+id/ch1901_btnWrite" />
  18. <Button
  19. android:text="读取"
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:id="@+id/ch1901_btnRead" />
  23. <TextView
  24. android:text="执行结果:"
  25. android:textAppearance="?android:attr/textAppearanceSmall"
  26. android:layout_width="match_parent"
  27. android:layout_height="wrap_content"
  28. android:id="@+id/ch1901_textView1"
  29. android:layout_marginLeft="15dp"
  30. android:layout_marginTop="20dp"
  31. android:layout_marginRight="15dp" />
  32. </LinearLayout>

2、添加ch1901MainActivity.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using Android.App;
  7. using Android.Content;
  8. using Android.OS;
  9. using Android.Runtime;
  10. using Android.Views;
  11. using Android.Widget;
  12.  
  13. namespace MyDemos.SrcDemos
  14. {
  15. [IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { ch.MyDemosCategory })]
  16. [Activity(Label = "【例19-1】 首选项基本用法")]
  17. public class ch1901MainActivity : Activity
  18. {
  19. protected override void OnCreate(Bundle savedInstanceState)
  20. {
  21. base.OnCreate(savedInstanceState);
  22. SetContentView(Resource.Layout.ch1901Main);
  23. var txt = FindViewById<TextView>(Resource.Id.ch1901_textView1);
  24. var btnWrite = FindViewById<Button>(Resource.Id.ch1901_btnWrite);
  25. btnWrite.Click += delegate
  26. {
  27. using (ISharedPreferences p = GetSharedPreferences("mydemos1", FileCreationMode.Private))
  28. {
  29. var p1 = p.Edit();
  30. p1.Clear();
  31. p1.PutInt("v1", );
  32. p1.PutString("v2", "hello");
  33. p1.Commit();
  34. txt.Text = "写入完毕!";
  35. }
  36. };
  37. var btnRead = FindViewById<Button>(Resource.Id.ch1901_btnRead);
  38. btnRead.Click += delegate
  39. {
  40. using (ISharedPreferences p = GetSharedPreferences("mydemos1", FileCreationMode.Private))
  41. {
  42. string s = "";
  43. foreach (var v in p.All)
  44. {
  45. s += $"key:{v.Key},value:{v.Value}\n";
  46. }
  47. txt.Text = $"读取的结果:\n{s}";
  48. }
  49. };
  50. }
  51. }
  52. }

【Android】19.1 SharedPreferences类的更多相关文章

  1. Android学习之SharedPreferences类

    SharedPreferences类 android.content.SharedPreferences 类概括: 访问和修改由函数getSharedPreferences(String,int)返回 ...

  2. Android 中替代 sharedpreferences 工具类的实现

    Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...

  3. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  4. 用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM(四)——Android端Http访问类(转)

    本章目的 在上一章中,我们利用Hibernate Tools完成了Android Model层的建立,依赖Hibernate Tools的强大功能,自动生成了Model层.在本章,我们将继续我们的项目 ...

  5. 29个android开发常用的类、方法及接口

    在安卓开发中,我们常常都需要借助各种各样的方法.类和接口来实现相关功能.提升开发效率,但对于初学者而言,什么时候该用什么类.方法和接口呢?下面小编整理了29个,日常开发中比较常用的类.方法.接口及其应 ...

  6. 【转】深入理解Android中的SharedPreferences

    SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...

  7. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

  8. Android应用开发SharedPreferences存储数据的使用方法

    Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

  9. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity ...

随机推荐

  1. Android遍历获取指定目录的文件(转)

    // 获取当前目录下所有的mp4文件 public static Vector<String> GetVideoFileName(String fileAbsolutePath) { Ve ...

  2. java的过滤器对session进行检查

    private void sendErrorToBrowser(HttpServletRequest request,HttpServletResponse response) throws IOEx ...

  3. Q1:Valid Parentheses

    Question: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine i ...

  4. 重叠IO overlapped I/O 运用详解

    2009年02月21日 星期六 下午 07:54 I/O设备处理必然让主程序停下来干等I/O的完成,对这个问题有 方法一:使用另一个线程进行I/O.这个方案可行,但是麻烦.               ...

  5. GridView显示数据鼠标悬停变色

    一. 首先在前台GridView中加上onrowdatabound="GridView1_RowDataBound": <asp:GridView ID="Grid ...

  6. 安装到LG手机出错

    [2013-07-10 07:44:31 - txrjsms] ERROR: Application requires API version 11. Device API version is 8 ...

  7. 转:【HTTP】常见错误码说明

    一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用详细分解: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明100 ...

  8. mysql高效索引之覆盖索引

    概念 如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作 判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引 ...

  9. HDUOJ----数塔

    数塔 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission ...

  10. Java获取资源的路径

    在Java中,有两种路径: 类路径 文件夹路径 使用类路径有两种方式: object.getClass().getResource()返回资源的URL MyClass.class.getResourc ...