Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞

在Android项目应用中,经常会用到读取和保存配置文件。Android提供了SharedPreference类方便的对配置文件进行操作。但是,项目中到处穿梭着类似这样的代码:

public WidgetListFactory(Context context) {
    this.context = context;
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    userId = sp.getInt(SettingsUtil.USERID, -1);
}

这样的代码,有没有让人觉得一段乱糟糟的,不但一处是,只要用到配置的地方,写法太任性,太随意了有木有?

反正只要能获取到全局的context,在需要参数读取和保存的地方,可以实现操作配置文件。

这种重复的,低效率的事,没给代码增加一点儿清晰度,还容易造成混乱。

且按照模块化的思想,应该尽可能的复用现有的成果。如果这么乱糟糟的使用起来不便还容易出错,更无法复用。

因此,有必要对配置文件的操作理一理,归归类,管理起来,方便复用,可做为一个模块来用。

在应用启动时,加载读取配置文件。在需要保存时,直接赋值并调用saveCfg()即可。

以下为按照这种思想写的一个系统配置类。

使用起来是不是很简单,很直观?

package com.example.yang.testmvvm.config;

import android.content.Context;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by yangyongzhen on 2018/08/04
 * 配置文件的全局管理,摒弃SharedPreference漫天飞
 * 系统配置SysCfg类
 * 在应用启动时,先初始化调用 SysCfg sysCfg = SysCfg.getInstance(context);
 * 接着sysCfg.readConfig();完成加载。
 * 然后全局的配置就可以使用,如sysCfg.ip.value即为IP地址的配置。
 * sysCfg.ver.value = "5678";
 * sysCfg.saveConfig();
 * 即完成了参数的保存。
 * 相比工程代码中到处穿梭的
 * SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
 * userId = sp.getInt(SettingsUtil.USERID, -1);
 * 是不是更清晰?更简单?更直观?
 */
public final class SysCfg {
    public static final String TAG = "SysCfg"; //做为配置文件的文件名

    private static Context context;
    private static SysCfg instance = null;
    SharedPreferencesHelper helper;

    public class Field{
        public String key;
        public String value;
        public Field(){
            key   = "null";
            value = "null";
        }
    }
    List<Field> list;
    //fields,步骤1,用到的配置
    public  Field ver = new Field(); //版本
    public  Field ip =  new Field(); //IP地址
    public  Field port= new Field(); //端口
    public  Field username = new Field(); //用户名
    public  Field password = new Field(); //密码

    /**
     * 需要增加或删除的变量配置都在这里修改
     * @param contx
     */
    private SysCfg(Context contx) {
        context = contx;
        helper = new SharedPreferencesHelper(context,TAG);
        list = new ArrayList<>();

        //步骤2:配置key
        ver.key  = "ver";
        ip.key   = "ip";
        port.key = "port";
        username.key = "username";
        password.key = "password";

        //步骤3:添加到list
        list.add(ver);
        list.add(ip);
        list.add(port);
        list.add(username);
        list.add(password);
    }

    /**
     * 保存参数时只需赋值,然后调用saveConfig()即可。
     * @return
     */
    public int saveConfig(){
        for(Field filed :list){
            helper.put(filed.key,filed.value);
        }
        return 0;
    }

    /**
     *仅在应用启动时加载一次,调用readConfig();
     * @return
     */
    public int readConfig(){
        for(Field filed :list){
            helper.get(filed.key,filed.value);
        }
        return 0;
    }
    public void printConfig(){
        String str="";
        for(Field filed :list){
            str += String.format("key=%s,value= %s\n",filed.key,filed.value);
        }
        Log.d(TAG, str);
    }

    public static SysCfg getInstance(Context contx){
        if(instance == null){
            instance = new SysCfg(contx);
        }
        return instance;
    }
}
package com.example.yang.testmvvm.config;

import android.content.Context;

import com.example.yang.testmvvm.utils.LogUtil;

import java.util.ArrayList;
import java.util.List;

public class OthCfg {

    public static final String TAG = "OthCfg"; //做为配置文件的文件名

    private static Context context;
    private static OthCfg instance = null;
    SharedPreferencesHelper helper;

    public class STRING{
        private String key;
        public  String value;

        public STRING(String skey,String svalue){
            key   = skey;
            value = svalue;
        }
    }

    public class LONG{
        private String key;
        public  long value;
        public LONG(String skey,long lvalue){
            key   = skey;
            value = lvalue;
        }
    }
    List<Object> list;

    //fields,步骤1,用到的配置
    public  LONG cardRecCout =  new LONG("cardRecCout",0); //记录数量统计
    public  LONG cardRecMone =  new LONG("cardRecMone",0); //记录金额统计 汇总
    public  LONG sendRecNum  =  new LONG("sendRecNum",0); //已上传的记录数目 汇总
    /**
     * 需要增加或删除的变量配置都在这里修改
     * @param contx
     */
    private OthCfg(Context contx) {
        context = contx;
        helper = new SharedPreferencesHelper(context,TAG);
        list = new ArrayList<>();
        //步骤2:添加到list
        list.add(cardRecCout);
        list.add(cardRecMone);
        list.add(sendRecNum);

    }

    /**
     * 保存参数时只需赋值,然后调用saveConfig()即可。
     * @return
     */
    public int saveConfig(){
        for(Object obj : list){
            if(obj instanceof STRING){
                helper.put(((STRING)obj).key, ((STRING)obj).value);
            }else if(obj instanceof LONG) {
                helper.put(((LONG)obj).key, ((LONG)obj).value);
            }
        }
        return 0;
    }

    /**
     *仅在应用启动时加载一次,调用readConfig();
     * @return
     */
    public int readConfig(){
        for(Object obj : list){
            if(obj instanceof STRING){
                helper.get(((STRING)obj).key, ((STRING)obj).value);
            }else if(obj instanceof LONG) {
                helper.get(((LONG)obj).key, ((LONG)obj).value);
            }
        }
        return 0;
    }
    public void printConfig(){
        String str="";
        for(Object obj : list){
            if(obj instanceof STRING){
                str += String.format("key=%s,value= %s\n",((STRING)obj).key,((STRING)obj).value);
            }else if(obj instanceof LONG) {
                str += String.format("key=%s,value= %d\n",((LONG)obj).key,((LONG)obj).value);
            }
        }
        LogUtil.d(str);
    }

    public static OthCfg getInstance(Context contx){
        if(instance == null){
            instance = new OthCfg(contx);
        }
        return instance;
    }
}

 

package com.example.yang.testmvvm.config;

import android.content.Context;
import android.content.SharedPreferences;
import java.util.Map;

/**
 * 对SharedPreferences的操作管理类
 */
public class SharedPreferencesHelper {
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;

    public SharedPreferencesHelper(Context context, String FILE_NAME) {
        sharedPreferences = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
    }

    /**
     * 存储
     */
    public void put(String key, Object object) {
        if (object instanceof String) {
            editor.putString(key, (String) object);
        } else if (object instanceof Integer) {
            editor.putInt(key, (Integer) object);
        } else if (object instanceof Boolean) {
            editor.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float) {
            editor.putFloat(key, (Float) object);
        } else if (object instanceof Long) {
            editor.putLong(key, (Long) object);
        } else {
            editor.putString(key, object.toString());
        }
        editor.commit();
    }

    /**
     * 获取保存的数据
     */
    public Object get(String key, Object defaultObject) {
        if (defaultObject instanceof String) {
            return sharedPreferences.getString(key, (String) defaultObject);
        } else if (defaultObject instanceof Integer) {
            return sharedPreferences.getInt(key, (Integer) defaultObject);
        } else if (defaultObject instanceof Boolean) {
            return sharedPreferences.getBoolean(key, (Boolean) defaultObject);
        } else if (defaultObject instanceof Float) {
            return sharedPreferences.getFloat(key, (Float) defaultObject);
        } else if (defaultObject instanceof Long) {
            return sharedPreferences.getLong(key, (Long) defaultObject);
        } else {
            return sharedPreferences.getString(key, null);
        }
    }

    /**
     * 移除某个key值已经对应的值
     */
    public void remove(String key) {
        editor.remove(key);
        editor.commit();
    }

    /**
     * 清除所有数据
     */
    public void clear() {
        editor.clear();
        editor.commit();
    }
    /**
     * 查询某个key是否存在
     */
    public Boolean contain(String key) {
        return sharedPreferences.contains(key);
    }
    /**
     * 返回所有的键值对
     */
    public Map<String, ?> getAll() {
        return sharedPreferences.getAll();
    }
}

 

发布了123 篇原创文章 · 获赞 165 · 访问量 37万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 成长之路 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览