簡體   English   中英

實例變量在java中神奇地分配

[英]Instance variable gets magically assigned in java

我已經嘗試修復應用程序中的錯誤 3 天了,但沒有成功。 問題是實例變量被神奇地分配了。

該應用程序是一個藍牙多人游戲,玩家輪流進行。 游戲結束后,會顯示一個對話框,詢問玩家是否願意繼續。 因此,當玩家 1 繼續時,會向玩家 2 發送一條消息,通知玩家 1 想要繼續。 變量“opponentContinued”變為真。 並且當玩家 2 也點擊繼續時,如果對方繼續為真,則游戲重新開始。

問題 :

當對話顯示給兩個玩家並且玩家 1 旋轉屏幕時,玩家 2 單擊繼續,玩家 1 收到通知並且“opponentContinued”被指定為 true。 在此之后,當玩家 1 單擊繼續並(opponentContinued 必須為 true)檢查“opponentContinued”是否為 true 時,發現“opponentContinued”為 false。

如果沒有旋轉,一切正常。

然后為了更清楚一點,我創建了一個虛擬變量來監視“opponentContinued”何時以及如何被分配,每次分配時我都將 dummyBoolean 設置為等於“opponentContinued”。 我將 dummyBoolean 設為默認值。 在“onContinueClicked”方法中,“dummyBoolean”為真,而“opponentContinued”為假。

public class MainActivity extends Activity {

    private boolean opponentContinued;
    private boolean dummyBoolean = true;



    private void onOpponentContinued(){
        opponentContinued = true;
        dummyBoolean = opponentContinued;
    }

    private void onContinueClicked(){
        // opponentContinued is false
        // dummyBoolean is true
        if (opponentContinued){
              // Continue the game
        }
    }
}

我不知道可能是什么問題。 有沒有人遇到過這樣的問題? 任何幫助表示贊賞。

編輯

請注意,該問題與在屏幕旋轉期間保存狀態無關。 問題是變量“opponentContined”在設置為true 后被“神奇地”分配給默認值false。

我知道這聽起來不切實際,但它毀了我很多時間。

https://developer.android.com/guide/topics/resources/runtime-changes.html

某些設備配置可能會在運行時更改(例如屏幕方向、鍵盤可用性和語言)。 當發生這樣的變化時,Android 會重新啟動正在運行的 Activity(調用 onDestroy(),然后是 onCreate())。 重啟行為旨在通過使用與新設備配置匹配的替代資源自動重新加載您的應用程序,從而幫助您的應用程序適應新配置。

為了正確處理重啟,重要的是您的 Activity 通過正常的 Activity 生命周期恢復其先前的狀態,其中 Android 在銷毀您的 Activity 之前調用 onSaveInstanceState() 以便您可以保存有關應用程序狀態的數據。 然后您可以在 onCreate() 或 onRestoreInstanceState() 期間恢復狀態

您的問題是,當用戶旋轉設備時,您的活動對象將被銷毀,並在其位置創建一個新對象。 因此,在創建新實例期間(重新)初始化這些值。 您需要保存狀態,然后在設備旋轉時恢復它。

當你檢查對手是否繼續時,你首先應該要求一個可變的內容。 如果opponentContinued為假,則對對方的設備重復該問題。

java 中布爾值的默認值為 false,因為正在重新創建由默認值 false 分配的變量

問題是 Activity 在屏幕方向改變時重新創建。你可以通過 3 種方法解決這個問題

1.你可以利用onSaveInstanceState和onRestoreInstanceState來保存和檢索布爾值

2.使您的布爾變量靜態並在生命周期方法之外聲明它

3.使用共享首選項來跟蹤您的布爾變量

暫無
暫無

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

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