0

我的應用程序中有幾個不同的用戶。有些關鍵字與這些用戶根據他們的選擇相關聯,我想讓他們這樣,當他登錄同一設備時,用戶2的k選定關鍵字不會顯示給用戶2。 這裏是基本的代碼:如何分隔2個不同用戶的關鍵字?

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(); 
} 

的問題是我沒有能夠得到它的expected.Theoretically工作:假設用戶1個登錄時,他首先考慮的用戶,並在同一時間,新的/不同用戶,直到他註銷。他在會話期間選擇的關鍵字設置按預期保存。現在,說他註銷並再次登錄,他應該能夠看到他的關鍵字設置,並且自從他登錄之前就被視爲「相同用戶」,除非其他用戶使用不同的id登錄到同一設備上,在這種情況下,它應該顯示所有新的默認關鍵字(在這種情況下可以說關鍵字2),並且不應該顯示以前的用戶選擇。目前基於上述邏輯,我實現了它似乎失靈,有時它工作,有時它不會將用戶識別爲不同的用戶,而是將相同的用戶和VICE VERSA識別出來。有沒有更好更緊湊的方式來限制和實現這個邏輯?

謝謝!

回答

0

那麼,如果你堅持使用共享首選項,你可以使用一個唯一的鍵(電子郵件,用戶名,userId什麼),並將其與關鍵字合併並保存以共享首選項。您需要一個特殊字符來分隔獨特的關鍵字和關鍵字(某些鍵值對)

例如,如果我們使用id作爲uniqkey和##作爲標記字符。關鍵字的關鍵字A應該保存爲「userid1 ## keywordA」)並從首選項中讀回它。你應該通過##分割它。

但是對於這樣的操作,共享偏好不是最好的地方,既然你有多個用戶,你應該使用一個數據庫。Android支持內置的SQLite數據庫,你可以看到一個tutorial here

好運

+0

我也在想,也許我可以添加一個變量,可以確保firsttimeuser變得相同用戶?和不同的用戶後,成爲另一個用戶,任何想法如何去? – 2014-10-10 10:49:35

+0

有了分隔符和用戶標識符,你將能夠識別誰e用戶是。比方說,用戶1的暱稱是暱稱1,分隔符##(綽號中不太可能用到的組合),關鍵字是carSelection。所以當用戶1選擇汽車奔馳。您將其記錄爲 editor.putString(「nickname1 ## carSelection」,「mercedes」); 閱讀它時,可以使用 getSharedPreferences(context).getString(「nickname1 ## carSelection」,null); 如果不存在,此代碼將返回值mercedes或null。 (而不是空,你可以返回一個默認值) – Warwicky 2014-10-10 13:30:37

+0

我也強烈建議你使用sqlite數據庫,但它的調用。 – Warwicky 2014-10-10 13:31:08

相關問題