zoukankan      html  css  js  c++  java
  • Android 之 getSharedPreferences 和 getPreferences

    今天为所做的小程序设计参数的保存,用到了 getSharedPreferences 和 getPreferences。

    首先,将对 getSharedPreferences 和 getPreferences 的调用模块化,做成一个类。关于这两个函数使用的要点,在代码中以注释的形式给出。

    类的实现如下:

     1 package com.hs.leozheng.backuprecords;  
     2   
     3 import android.app.Activity;  
     4 import android.content.Context;  
     5 import android.content.SharedPreferences;  
     6   
     7 /* 
     8  * 定义了两组函数,分别使用 getSharedPreferences 和 getPreferences 
     9  * */  
    10   
    11 public class ConfigsData {  
    12     // public static final String NetConfigsData = "NetConfigsData";  
    13     public static final String NetConfigIP = "NetConfigIP";  
    14       
    15     /* 
    16      * 可以通过如下两个方法中的某个方法来创建一个新的 Shared preferences 文件或者访问一个已经存在的文件 
    17         1、getSharedPreferences() 如果应用中有多个 Shared Preferences 文件需要保存,这个方法很适合 
    18             第一个参数为你给这个文件指定的 ID,可以通过应用的上下文来调用它 
    19             getSharedPreferences 是 Context 类中的方法, 可以指定 filename 以及  mode 
    20         2、getPreferences() 如果应用只需要保存一个 Shared Preferences 文件,这个方法很适合 
    21             由于应用只有一个 Shared Preferences 文件,所以不需要为其指定名称,系统在创建时会默认一个名称 
    22             getPreferences 是 Activity 类中的方法,只需指定 mode 
    23      * */  
    24       
    25     /* 
    26      * 根据 API 文档描述,SharedPreferences 是一个单例类,这样容易保证多方同时操作时的同步 
    27      * SharedPreferences 实际上管理的是 XML 文件,所有的设置值都以 KEY-VALUE 的形式保存在 /data/data/PACKAGE_NAME/shared_prefs 目录下对应的文件中 
    28      * */  
    29     boolean saveConfigDataEx(Context context,String configName,String value) {  
    30         SharedPreferences settings = context.getSharedPreferences(configName, 0);  
    31         SharedPreferences.Editor editor = settings.edit();  
    32         editor.putString(configName, value);  
    33         editor.commit();  
    34           
    35         return true;  
    36     }  
    37       
    38     String readConfigDataEx(Context context,String configName) {  
    39         SharedPreferences settings = context.getSharedPreferences(configName, 0);  
    40         String ip = settings.getString(configName, "127.0.0.1");  
    41           
    42         return ip;  
    43     }  
    44       
    45     /* ---------------------------------------------------------------------------------- */  
    46     boolean saveConfigData(Activity activity,String configName,String value) {  
    47         SharedPreferences settings = activity.getPreferences(Context.MODE_PRIVATE);  
    48         SharedPreferences.Editor editor = settings.edit();  
    49         editor.putString(configName, value);  
    50         editor.commit();  
    51           
    52         return true;  
    53     }  
    54       
    55     String readConfigData(Activity activity,String configName) {  
    56         SharedPreferences settings = activity.getPreferences(Context.MODE_PRIVATE);  
    57         String ip = settings.getString(configName, "127.0.0.1");  
    58           
    59         return ip;  
    60     }  
    61 }  

    类实现了,就要对类进行简单的测试。编写了如下的测试代码,先是分析调用 getSharedPreferences 和 getPreferences 的两个函数,然后是对这两个函数的调用。

     如下代码所示:

     1 void testCallConfigSave(Activity activity) {  
     2     ConfigsData configsData = new ConfigsData();  
     3     String netIP = configsData.readConfigData(activity, ConfigsData.NetConfigIP);  
     4     Log.i(phoneBookInfo.TAG, "Read config data,IP is: " + netIP);  
     5       
     6     configsData.saveConfigData(activity, ConfigsData.NetConfigIP, "192.168.3.9");  
     7     netIP = configsData.readConfigData(activity, ConfigsData.NetConfigIP);  
     8     Log.i(phoneBookInfo.TAG, "Read config data,IP is: " + netIP);  
     9       
    10     configsData.saveConfigData(activity, ConfigsData.NetConfigIP, "192.168.3.10");  
    11     netIP = configsData.readConfigData(activity, ConfigsData.NetConfigIP);  
    12     Log.i(phoneBookInfo.TAG, "Read config data,IP is: " + netIP);  
    13 }  
    14   
    15 void testCallConfigSaveEx(Context context) {  
    16     ConfigsData configsData = new ConfigsData();  
    17     configsData.readConfigDataEx(context, ConfigsData.NetConfigIP);  
    18     String netIP = configsData.readConfigDataEx(context, ConfigsData.NetConfigIP);  
    19     Log.i(phoneBookInfo.TAG, "ReadEx config data,IP is: " + netIP);  
    20       
    21     configsData.saveConfigDataEx(context, ConfigsData.NetConfigIP, "192.168.4.9");  
    22     netIP = configsData.readConfigDataEx(context, ConfigsData.NetConfigIP);  
    23     Log.i(phoneBookInfo.TAG, "ReadEx config data,IP is: " + netIP);  
    24       
    25     configsData.saveConfigDataEx(context, ConfigsData.NetConfigIP, "192.168.4.10");  
    26     netIP = configsData.readConfigDataEx(context, ConfigsData.NetConfigIP);  
    27     Log.i(phoneBookInfo.TAG, "ReadEx config data,IP is: " + netIP);  
    28 }  

    在 Activity 的 onCreate 中调用(注意参数的不同):

    1 testCallConfigSave(this);  
    2 testCallConfigSaveEx(getApplicationContext()); 

    两次运行后输出的 LOG 分别如下:

    第一次运行的 LOG 如下(卸载后运行算是第一次):  
     Read config data,IP is: 127.0.0.1  
     Read config data,IP is: 192.168.3.9  
     Read config data,IP is: 192.168.3.10  
     ReadEx config data,IP is: 127.0.0.1  
     ReadEx config data,IP is: 192.168.4.9  
     ReadEx config data,IP is: 192.168.4.10  
      
    第二次运行的 LOG 如下:  
     Read config data,IP is: 192.168.3.10  
     Read config data,IP is: 192.168.3.9  
     Read config data,IP is: 192.168.3.10  
     ReadEx config data,IP is: 192.168.4.10  
     ReadEx config data,IP is: 192.168.4.9  
     ReadEx config data,IP is: 192.168.4.10  

    至此,测试完成。对 getSharedPreferences 和 getPreferences 调用的代码功能正常。

  • 相关阅读:
    如何将一个整数分散成百分位、千分位等
    好用的竖直无缝滚动
    图片轮播插件
    新浪sae授权流程的理解
    js和php对数字格式化
    控制input表单的输入的字数
    真实的恐怖(转载)
    日本的寒暑假+春假
    也不知道你今天的路线是怎么样的
    关于中日区别
  • 原文地址:https://www.cnblogs.com/91program/p/5193371.html
Copyright © 2011-2022 走看看