gpt4 book ai didi

java - 多个 XML 文件的 SharedPreferences 管理器类

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:38 25 4
gpt4 key购买 nike

我有一个通过 SharedPreferences (SP) 管理数据的应用程序。我将它们拆分为不同的 XML 文件,以使操作更快(清除、提交、应用……)并且更有条理。
我还为每个类创建了一个类来抽象操作并创建样板代码,以避免在需要更新 SP 数据的类上重复相同的代码。

由于 SP 的想法是在整个应用程序中共享信息,因此在我的例子中,最好使用应用程序上下文来操作其上的数据,即使 SP 是单个实例。

但我不确定这样做是否是一个好的做法。您是否遇到过类似的情况?

我当前的实现( fragment ):

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 读取/写入 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();

我可以谈谈你对这种方法的看法吗?

最佳答案

我遇到了类似的问题,我决定使用静态方法来修复。

由于 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"));

不确定这是否对您有帮助。我发现它很简单,并且提供了我正在寻找的控件。

关于java - 多个 XML 文件的 SharedPreferences 管理器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com