簡體   English   中英

由於某種原因,我的if語句沒有觸發

[英]For some reason my if statement isn't triggering

我創建了一個正常工作的onSharedPreferencesChangeListener。 我知道這一點,因為當我設置監聽器時,我記錄了監聽器並且它正在觸發更改。

但是,當我嘗試切換密鑰變量時(我說我需要JRE 1.7+才能切換字符串)時出現錯誤,因此我將其更改為if-elseif語句。

if-elseif語句沒有觸發,所以我將前兩個更改為if語句並在之后放入elseif(認為elseif可能是問題)。 仍然沒有觸發。

奇怪的是,當我記錄事件觸發器時,我輸出“ ”+ key +“ ”作為字符串,鍵值是我正在測試的確切字符串。

這是我的代碼,有人能指出我正確的方向嗎?

    // logic for action when a shared preference is changed.
    prefs.registerOnSharedPreferenceChangeListener( new SharedPreferences.OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            String TAG = "UltimateScoreboard";

            if (key == "Main_Clock_Minutes") {
                msMainClockStart = Long.valueOf( prefs.getString( "Main_Clock_Minutes", "0" ) ) * 60000;
                Log.i( TAG, key + " changed: " + String.valueOf(msMainClockStart) );
            }

            if ( key == "Use_ShotClock" ) {
                useShotClock = prefs.getBoolean( "Use_ShotClock", false );

                if( useShotClock )
                    btnShotClock.setVisibility( View.VISIBLE );
                else
                    btnShotClock.setVisibility( View.INVISIBLE );

                Log.i( TAG, key );
            } 

            else if ( key == "Shot_Clock_Seconds" ) {
                msShotClockStart = Long.valueOf( prefs.getString( "Shot_Clock_Seconds", "0" ) ) * 1000;
                Log.i( TAG, key + " changed: " + Long.valueOf(msShotClockStart) );
            }

您必須使用String.equals()函數來比較字符串。 == with Strings僅比較內存位置。

例如: if (key.equals("Main_Clock_Minutes"))

您無法使用==比較字符串。 使用String類方法equals()equalsIgnoreCase()

if ( key.equals("Use_ShotClock") ) { }

這是比較字符串的方式

你應該比較if(key.equals(“Use_ShotClock”))或if(key.equalsIgnoreCase(“Use_ShotClock”))。 因為string是java中的對象。 因此,如果您比較if(key ==“Use_ShotClock”),它將嘗試比較那兩個不同的字符串對象的參考。

您是否嘗試過使用.equals()來比較strings

像這樣:

if (key.equals("Main_Clock_Minutes")) {
    msMainClockStart = Long.valueOf( prefs.getString( "Main_Clock_Minutes", "0" ) ) * 60000;
    Log.i( TAG, key + " changed: " + String.valueOf(msMainClockStart) );
} else if ( key.equals("Use_ShotClock")) {
    useShotClock = prefs.getBoolean( "Use_ShotClock", false );

    if( useShotClock )
        btnShotClock.setVisibility( View.VISIBLE );
    else
        btnShotClock.setVisibility( View.INVISIBLE );

    Log.i( TAG, key );
} else if ( key.equals("Shot_Clock_Seconds")) {
    msShotClockStart = Long.valueOf( prefs.getString( "Shot_Clock_Seconds", "0" ) ) * 1000;
    Log.i( TAG, key + " changed: " + Long.valueOf(msShotClockStart) );
}

必須使用String的方法equals(String s)對字符串進行相等性測試。

“==”運算符沒有為Strings重載,因為String是引用類型(它是一個對象,而不是一個基本類型),它是使用“==”進行比較的內存地址。 由於Javas能夠為多個變量共享內存,因此在將字符串與“==”進行比較時,有可能實現,但這種可能性較小且非常不可預測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM