我认为这将是最简单的解决方案,事实证明这是最令人困惑的。
我正在创建一个需要从多个“帐户”中引用信息的应用程序...例如名称,电子邮件地址,帐号,密码和其他一些字段...大约15个项目。此应用程序中最多可以有15-20个帐户,具体取决于用户。每一个都会被手动添加,信息会被填写和存储。
我决定使用“首选项片段”来简化此信息的输入,因为每个人都熟悉Android“首选项”屏幕的工作方式,并且输入的信息非常简单。为什么在内置看起来可以正常工作时创建自己的输入屏幕。
我在这里询问我是否应该将数据存储在首选项或SQL数据库中。基本共识,取决于我是否需要搜索或排序,在SQL数据库中可能会更容易....否则,在内部使用首选项。
我为SQL数据库创建了代码,然后对如何从首选项代码进出数据感到困惑。我在这里要求获得一些帮助,以使其正常工作。不幸的是,这种迷路了,再次建议我将其存储在pref中。
因此,我再次开始考虑将其保存在首选项文件中。
因为每个帐户大约有15个字段,并且有15个或更多帐户的可能性,所以使用具有225多个条目(name1,name2,name3 ... email1,email2,email3等)的单个首选项XML文件似乎是错误的做到这一点的方法。
如果我不这样做,我会假设我需要为每个“帐户”创建一个单独的XML文件...全部具有相同的字段,只是命名不同,例如R.xml.acct1,R.xml.acct2等,然后在addPreferencesFromResources以及保存调用期间调用相应的R.xml文件。
问题是,这是正确的还是最佳的方法?还有其他我想念的东西吗?还是使用SQL数据库更好地处理此问题?也许我应该放弃首选项并使用SQL并创建自己的输入/编辑屏幕?
最佳答案
彼得,
如果您熟悉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)文件名。您可以将它们存储在另一个共享首选项中的字符串数组中,并在添加或删除帐户时添加或删除名称。