我是Android开发的菜鸟,我正在尝试使用共享首选项来获取onCreate期间的double值。但是,我执行此操作的代码似乎只在我第一次重新启动应用程序时才起作用。在随后的重新启动期间,代码不起作用并跳过我的代码的if / else部分。这非常令人沮丧,因为如果它工作一次,它应该每次都有效。非常感谢任何帮助。
public void LoadPreferences(){
double portfoliocurrency1 = null;
SharedPreferences portfoliopreferences = getPreferences(MODE_PRIVATE);
String isuser1created = portfoliopreferences.getString("U1C", "");
if(isuser1created.equals("yes")){
String savedportfolioname = portfoliopreferences.getString("PN1", "");
String saveddenomination = portfoliopreferences.getString("DN1", "");
String savedporfoliocurrency = portfoliopreferences.getString("PC1", ""); //<--Always either "usd", "inr", or "eur".
Log.d("test","SPConLoad=" + savedporfoliocurrency ); //<--Returns correct value on every restart.
Log.d("test","USD=" + currencyUSD ); //<--Returns correct value on every restart.
Log.d("test","EUR=" + currencyEUR ); //<--Returns correct value on every restart.
pn1 = savedportfolioname;
denomination1 = saveddenomination;
if(savedporfoliocurrency=="usd"){ //<--If/else statement only works on first restart. For some reason it is skipped on subsequent restarts.
portfoliocurrency1 = currencyUSD;
Log.d("test","PC1USD=" + currencyUSD ); //<--Returns correct value on first restart.
}else if(savedporfoliocurrency=="eur"){
portfoliocurrency1 = currencyEUR;
Log.d("test","PC1EUR=" + currencyEUR ); //<--Returns correct value on first restart.
}else if(savedporfoliocurrency=="inr"){
portfoliocurrency1 = currencyINR; //<--Returns correct value on first restart.
}
Log.d("test","PC1onLoad=" + portfoliocurrency1 ); //<-- Only returns correct value during first restart. Always returns null on subsequent restarts.
}
答案 0 :(得分:3)
你应该在这里使用String.equals(),而不是==。
if(savedporfoliocurrency=="usd"){
例如,请参阅SO问题Java String.equals versus ==。
==,正如您所发现的,有时会工作,但这不是您想要做的。您想要检查内容,而不是它们存储的位置。
答案 1 :(得分:1)
变化:
savedporfoliocurrency=="usd"
到
savedporfoliocurrency.equals("usd")
并在类似的manar中修复其他字符串比较