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 调用的代码功能正常。

posted @ 2016-02-16 17:19  91program  阅读(3063)  评论(0编辑  收藏  举报