每个用户的SharedPreferences?

时间:2015-12-14 10:46:48

标签: android sharedpreferences android-preferences

我需要为每个用户保留一组首选项,并为整个应用程序保留另一组首选项。用户保存在SQLite数据库中。

我还将使用PreferenceFragment来显示首选项。

如果我对每个用户使用getSharedPreferences()而系统使用一个,则首选项片段是否会显示正确的首选项?

或者我应该在我的情况下使用表格:

  1. 放弃使用PreferenceFragment并编写我自己的类和布局
  2. 根据存储在SQLite中的用户和系统首选项在启动时填写一个首选项文件
  3. 在这种情况下,最好的练习是什么?

2 个答案:

答案 0 :(得分:2)

您可以创建具有与之关联的Userid的多个首选项文件以及前缀。 喜欢: -

import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;

/**
 * Created by vikas on 12/14/15.
 */
public class Pref {
    private static final String PREF_NAME = "AppName_%s";
    private SharedPreferences mPreferences;
    private String mUserId;
    private static Pref sInstance;

    private Pref(Context pContext, String pUserId) {
        mUserId = pUserId;
        mPreferences = pContext.getSharedPreferences(String.format(PREF_NAME, pUserId), Context.MODE_PRIVATE);
    }


    public String getUserId() {
        return mUserId;
    }

    public static Pref getPreferences(Context context, String userId) {
        if (null != sInstance || !TextUtils.equals(sInstance.getUserId(), userId)) {
            sInstance = new Pref(context, userId);
        }
        return sInstance;
    }

    //write methods for updating in preference files
}

答案 1 :(得分:0)

SharedPreferences是存储在手机上的XML文件。如果您想为多个用户保存多个文件,并且存在用户 - >文件连接,那么您自然会 CAN 这样做。

只需使用用户的唯一标识符命名首选项文件。

其他解决方案是多租户数据库。在该类型的数据库中,每个表都有一个租户ID列,用于从单个表中过滤一个用户的数据。其他所有内容都可以与一个用户相同。

如果需要进一步解释答案,请随时发表评论,我会尽力回答我所知道的问题。