• 【Android】19.1 SharedPreferences类


    分类: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—首选项基本用法

    运行截图

    image   image

    设计步骤

    1、添加ch1901Main.axml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:minWidth="25px"
        android:minHeight="25px">
        <fragment
            android:name="MyDemos.MyDemosFragment"
            android:tag="mydemos"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:text="写入"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ch1901_btnWrite" />
        <Button
            android:text="读取"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ch1901_btnRead" />
        <TextView
            android:text="执行结果:"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ch1901_textView1"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="20dp"
            android:layout_marginRight="15dp" />
    </LinearLayout>

    2、添加ch1901MainActivity.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    
    namespace MyDemos.SrcDemos
    {
        [IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { ch.MyDemosCategory })]
        [Activity(Label = "【例19-1】 首选项基本用法")]
        public class ch1901MainActivity : Activity
        {
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.ch1901Main);
                var txt = FindViewById<TextView>(Resource.Id.ch1901_textView1);
                var btnWrite = FindViewById<Button>(Resource.Id.ch1901_btnWrite);
                btnWrite.Click += delegate
                {
                    using (ISharedPreferences p = GetSharedPreferences("mydemos1", FileCreationMode.Private))
                    {
                        var p1 = p.Edit();
                        p1.Clear();
                        p1.PutInt("v1", 20);
                        p1.PutString("v2", "hello");
                        p1.Commit();
                        txt.Text = "写入完毕!";
                    }
                };
                var btnRead = FindViewById<Button>(Resource.Id.ch1901_btnRead);
                btnRead.Click += delegate
                {
                    using (ISharedPreferences p = GetSharedPreferences("mydemos1", FileCreationMode.Private))
                    {
                        string s = "";
                        foreach (var v in p.All)
                        {
                            s += $"key:{v.Key},value:{v.Value}
    ";
                        }
                        txt.Text = $"读取的结果:
    {s}";
                    }
                };
            }
        }
    }
  • 相关阅读:
    灰度直方算法 C++
    三国谋士智商前20名
    get the runing time of C++ console program.
    支持向量机 support vector machine
    Typical sentences in SCI papers
    C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD
    通过管理工具对服务器进行远程管理
    Connected_Component Labelling(联通区域标记算法) C++实现
    Fragstats景观分析研究
    Install GDAL in OpenSUSE 12.3 Linux
  • 原文地址:https://www.cnblogs.com/rainmj/p/5244376.html
Copyright © 2020-2023  润新知