多个XML文件的SharedPreferences管理器类

时间:2018-04-09 10:21:05

标签: java android sharedpreferences android-context

我有一个通过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();

我可以就这种方法发表意见吗?

1 个答案:

答案 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"));

不确定这是否对您有所帮助。我发现它很简单,它给了我正在寻找的控制。