2016-08-20 5 views
0

私はここで奇妙な状況に直面しています。PreferenceManagerから取得した文字列(「C」など)は、「C」と等しくない

私の嗜好活動を閉じた後、次のルーチンが呼び出されます。それは何

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
String tmp = preferences.getString("unit", "C"); 
CommonTool.temperatureUnit = tmp; 

は、私は好みの活動から作られたと私はCommonTool.temperatureUnitと呼ばれるグローバル変数に格納していた設定を取得し、です。この場合、値 "C"が割り当てられます。

今すぐお試しください。

CommonToolクラスでは、摂氏または華氏の温度を返す関数がありますが、これはユーザーの設定に依存しています。プリファレンスのアクティビティから取得しました。

public static String getCommonTemperature(int celsius) { 
    int ret; 

    if (temperatureUnit == "C") { 
     ret = celsius; 
    } 
    else { 
     ret = (9/5) * celsius + 32; 
    } 

    return Integer.toString(ret); 
} 

事がtemperatureUnitは、「C」が含まれていながら、それはそれのelse一部に秋を保持します。..です。

Capture while in debug mode

誰がどんな考えを持っていますか? ありがとうございます。

+0

あなたは、たとえばFにその優先順位を設定していますか?どうやって?どこ? – ddb

+2

if(temperatureUnit.equalsIgnoreCase( "C")){....} –

+0

'=='演算子は、オブジェクトへの参照が等しいかどうかをチェックします。理解を深めるために[this](http://stackoverflow.com/questions/767372/java-string-equals-versus)を読んでください。 – Bee

答えて

0

この..

パブリック静的な文字列getCommonTemperature(INT摂氏){ INTのRETを試します。

if (temperatureUnit.equalsIgnoreCase("C")) { 
    ret = celsius; 
} 
else { 
    ret = (9/5) * celsius + 32; 
} 

return Integer.toString(ret); 

}

+0

Thanks Silam、 '' eqaulsIgnoreCase'''または ''equals'''は私の場合には完璧に機能します。 – Harry

関連する問題