使用共享首选项与多个相同资源混淆

时间:2015-07-16 03:12:50

标签: android mysql xml sharedpreferences

我认为这是最简单的解决方案,被证明是最令人困惑的。

我正在创建一个需要引用来自多个"帐户" ...的应用程序的信息,例如姓名,电子邮件地址,帐号,密码和其他一些字段...大约15项。根据用户的不同,此应用中可能有多达15-20个这样的帐户。每个人都将手动添加,并填写和存储信息。

我决定使用偏好片段来简化输入此信息,因为每个人都熟悉Android Preference屏幕的工作原理,输入的信息非常简单。为什么在内置工具看起来像它可以工作时创建我自己的输入屏幕。

我在这里询问是否应将数据存储在首选项或SQL数据库中。基本共识,取决于我是否需要搜索或排序,在SQL数据库中可能更容易....否则,在首选项内部。

我为SQL数据库创建了代码,然后对如何将数据输入和输出首选项代码产生了一些困惑。我在这里要求帮助让这个工作起来。不幸的是,这种情况已经丢失,并且再次建议我存储在pref中。

所以,我开始考虑再次将它保存在pref文件中。

因为每个帐户大约有15个字段,并且可能有15个或更多帐户,所以具有225个条目的单个首选项XML文件(name1,name2,name3 ... email1,email2,email3 ......等)这似乎是错误的做法。

如果我不这样做,我会假设我需要为每个"帐户"创建一个单独的XML文件。 ...所有具有相同字段,只是命名不同,如R.xml.acct1,R.xml.acct2等...然后在addPreferencesFromResources期间调用相应的R.xml文件以及保存调用。

问题是,这是正确的还是最好的方法?还有其他我想念的东西吗?或者使用SQL数据库更好的方法来处理这个问题?也许我应该放弃首选项并使用SQL并创建自己的输入/编辑屏幕?

1 个答案:

答案 0 :(得分:0)

彼得,

如果您熟悉sqlite以及处理它所需的所有代码,则可以使用db。这不是一个糟糕的选择;但是,对你正在做的事情来说可能有些过分。

如果您想使用SharedPreferences,我建议为每个帐户创建xml文件并将数据存储在xml文件中。这将要求您创建一个视图来捕获数据,而不是使用首选项片段。

以下是一些可以帮助您开始保存数据的代码。

public static boolean setAccountInformation(final Context context, final String accountName, final Account account) {
        SharedPreferences.Editor editor = context.getSharedPreferences(accountName, Context.MODE_PRIVATE).edit();
        editor.putString("account_name", account.name);
        editor.putString("account_email", account.email);
        ...
        return editor.commit();
}

public static Account getAccountInformation(final Context context, final String accountName) {
    Account account = new Account();
    SharedPreferences preference = context.getSharedPreferences(accountName, Context.MODE_PRIVATE);
    account.email = preference.getString("account_name", null);
    account.name  = preference.getString("account_email", null);
    ...
    return account;
}

这将要求您跟踪帐户(xml)文件名。您可以将它们存储在另一个共享首选项的字符串数组中,并在添加或删除帐户时添加或删除名称。