我正在尝试编写一个单例类来监督涉及共享首选项的所有操作.
我希望能够使用此类来编写给定类型的首选项,例如:
stg_full_screen: true // as boolean
这是我到目前为止所做的:
import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; public class SharedPrefManager extends Activity { // Globals private int GENERAL = 1000; private int SETTINGS = 2000; private int TEMP_STORE = 3000; private String PREF_GENERAL = "com.example.general"; private String PREF_SETTINGS = "com.example.settings"; private String PREF_TEMP_STORE = "com.example.temp_store"; private SharedPreferences general; private SharedPreferences settings; private SharedPreferences tempStore; private SharedPreferences.Editor general_editor; private SharedPreferences.Editor settings_editor; private SharedPreferences.Editor temp_store_editor; // Instantiate singleton object private static SharedPrefManager ourInstance = new SharedPrefManager(); public static SharedPrefManager getInstance() { return ourInstance; } private SharedPrefManager() { // Get handle on all preference files general = getSharedPreferences(PREF_GENERAL,Context.MODE_PRIVATE); settings = getSharedPreferences(PREF_SETTINGS,Context.MODE_PRIVATE); tempStore = getSharedPreferences(PREF_TEMP_STORE,Context.MODE_PRIVATE); // provision editors for all preference files general_editor = general.edit(); settings_editor = settings.edit(); temp_store_editor = tempStore.edit(); } private String read_prefs (String pref_name) { // this method reads a preference and returns it // ideally,i would want to be able to return appropriate types by request // e.g boolean,string return null; } private void write_prefs (String pref_name,String pref_val) { // this method would take a preference and write the appropriate type to prefs } // this method determines where to put a preference by checking the name of the key // this works because i use the following naming conventions // stg_name for settings,tmp_name for all that goes into tempStore private String resolve_pref_category (String path) { if (path.startsWith("stn")) return PREF_SETTINGS; else if (path.startsWith("tmp")) return PREF_TEMP_STORE; else return PREF_GENERAL; } }
我的问题是:
>这是明智的做法吗?
>我如何有效地确定偏好的类型?
谢谢
解决方法
通常,我使用这样的东西:
没有静态上下文引用,每个属性的静态getter / setter,在需要时,您可以为某些属性添加内存缓存值,以便从内存中更快地获取它,而不是从SharedPreferences中读取.明确的api.
public class SharedPreferencesManager { private static final String APP_SETTINGS = "APP_SETTINGS"; // properties private static final String SOME_STRING_VALUE = "SOME_STRING_VALUE"; // other properties... private SharedPreferencesManager() {} private static SharedPreferences getSharedPreferences(Context context) { return context.getSharedPreferences(APP_SETTINGS,Context.MODE_PRIVATE); } public static String getSomeStringValue(Context context) { return getSharedPreferences(context).getString(SOME_STRING_VALUE,null); } public static void setSomeStringValue(Context context,String newValue) { final SharedPreferences.Editor editor = getSharedPreferences(context).edit(); editor.putString(SOME_STRING_VALUE,newValue); editor.commit(); } // other getters/setters }