如何为2个不同的用户分隔关键字?

时间:2014-10-10 01:15:16

标签: java android android-activity android-fragments android-preferences

我的应用上有几个不同的用户。根据这些用户的选择,存在与这些用户相关联的某些关键字,并且我想使它们在用户2登录同一设备时不显示用户2的kselected关键字。 这是基本代码:

Boolean firstuserlogin= Sharedpreferences.getinstance().firstlogin;
Boolean sameuserlogin = !Sharedpreferences.getinstance().differentuser;
Boolean differentuserlogin = Sharedpreferences.getinstance().differentuser;

if(firstuserlogin && differentuserlogin) {
//Please note: firsttime user is also considered a new/different user 
m_keyword = Sharedpreferences.getinstance().getkeyword1();
}else if(sameuserlogin){
m_keyword = Sharedpreferences.getinstance().getkeyword1();
}else if(differentuser){
m_keyword = Sharedpreferences.getinstance().getkeyword2();
}else{
m_keyword = Sharedpreferences.getinstance().getkeyword1();
}

问题是我无法按预期工作。从理论上讲:假设用户1登录,他被认为是第一个用户,同时又是一个新的/不同的用户,直到他退出。他在会话期间选择的关键字设置将按预期保存。现在,假设他退出并再次登录,他应该能够看到他的关键字设置并被视为" sameuser"因为他之前登录过,除非其他用户拥有不同的id登录同一设备,在这种情况下,它应该显示所有新的默认关键字(在这种情况下可以说是keyword2),不应该显示以前的用户选择。目前基于我实现的上述逻辑,它似乎变得混乱,有时它有效,有时它不会将用户识别为不同的用户,而是同一用户和VICE VERSA。有没有一种更好,更紧凑的方法可以限制和实现这种逻辑?

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,如果您坚持使用共享首选项,则可以使用唯一键(电子邮件,用户名,userId任何内容)并将其与关键字合并并保存以共享首选项。您将需要一个特殊字符来分隔唯一键和关键字(某些键值对)

例如,如果我们使用id作为uniqkey而##作为标记字符。您应该将关键字设置为“userid1 ## keywordA”的keywordA,然后从首选项中读取它。获得后,您应该通过##将其拆分。

但是对于此类操作,共享首选项不是最佳位置,因此您应该使用数据库,因为您有多个用户。 Android支持内置的sqlite数据库。您可以看到tutorial here

祝你好运