在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 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(); } }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/242165.html