我有一个通过SharedPreferences(SP)管理数据的应用程序。 我将它们拆分为不同的XML文件,以使操作更快(清除,提交,应用......)并使其更有条理 我还为每个人创建了一个类来抽象操作并创建样板代码,以避免在需要更新SP上的数据的类上重复相同的代码。
由于拥有SP的想法是在整个应用程序中共享信息,在我的情况下,最好使用应用程序上下文来操作它上面的数据,即使SP是单个实例。
但我不确定这样做是否是一个好习惯。你有没有遇到类似的情况?
我当前的实现(摘录):
MyApplication.java
public class MyApplication extends Application {
private static PreferenceHelper mPref;
@Override
public void onCreate() {
mPref = new PreferenceHelper(this);
}
}
PreferenceHelper.java
public class PreferenceHelper {
private PreferenceUser mPrefUser;
private PreferenceTechnician mPrefTechnician;
public PreferenceHelper(Context context) {
this.mPrefUser = new PreferenceUser(context);
this.mPrefTechnician = new PreferenceTechnician(context);
}
public PreferenceUser getPrefUser() {
return mPrefUser;
}
public PreferenceTechnician getPrefTechnician() {
return mPrefTechnician;
}
}
PreferenceUser.java
public class PreferenceUser {
private static final String PREF_USER_FILENAME = "user";
private SharedPreferences mPref;
public PreferenceUser(Context context) {
mPref = context.getSharedPreferences(PREF_USER_FILENAME, Context.MODE_PRIVATE);
}
public void clear() {
mPref.edit().clear().commit();
}
public void saveNewUser(User user) {
SharedPreferences.Editor editor = mPref.edit();
editor.putString(user.getId(), gson.toJson(user));
editor.commit();
}
public List<User> getAllList() {
...
// get a map, convert to POJO using Gson,etc
...
}
}
PreferenceTechnician.java
Same as PreferenceUser, but for Techs
MainActivity.java(或任何其他需要从/向SP读/写的内容)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
writeSomethingOnSP();
}
private void writeSomethingOnSP() {
MyApplication.getPref().getPrefUser().saveNewUser(new User(1, "Ana", "Developer"));
}
}
每当我需要在SharedPreference上读取或写入内容时,我都会使用 MyApplication.getPref()。getPrefNameOfPreference()。doSomeAction(); 。
我可以就这种方法发表意见吗?
答案 0 :(得分:0)
我有类似的问题,我致力于修复static
方法。
由于SharedPreferences
没有被大量使用,我决定不存储它们的任何实例,而是在我需要的时候获取它们。此外,由于所有读/写操作都在同一个类的中心,我有我需要的控件(在该文件上保存此设置等)
我做了类似的事情:
public class SettingsUtil {
private static final String PREF_USER_FILENAME = "user";
private static final String PREF_TECH_FILENAME = "tech";
public static void saveNewUser(Context context, User user) {
SharedPreferences sharedPref = context.getApplicationContext().getSharedPreferences(PREF_USER_FILENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
....
editor.apply();
}
public static void addNewTech(Context context, Tech tech) {
SharedPreferences sharedPref = context.getApplicationContext().getSharedPreferences(PREF_TECH_FILENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
....
editor.apply();
}
...
}
然后,致电:
Settings.Util.addNewUser(this, new User(1, "Ana", "Developer"));
不确定这是否对您有所帮助。我发现它很简单,它给了我正在寻找的控制。