2013-03-15 68 views
0

嗨,我是一個在android的新手,並通過tictactoe教程。我需要保存電路板的狀態,以便在改變方向時電路板顯示爲字符完好無損。這裏是代碼段 - 試圖和轉換的字符串正在保存並顯示,但不是板上的X和O。我沒有線索,爲什麼保存方向板的狀態

MainActivity.java

  mGame = new TicTacToeGame(); 

     if (savedInstanceState == null) { 
      startNewGame(); 
      } 
      else { 
      // Restore the game's state      
      mGame.setBoardState(savedInstanceState.getCharArray("board"));    
      mGameOver = savedInstanceState.getBoolean("mGameOver"); 
      mInfoTextView.setText(savedInstanceState.getCharSequence("info")); 
      mHumanWins = savedInstanceState.getInt("mHumanWins"); 
      mComputerWins = savedInstanceState.getInt("mComputerWins"); 
      mTies = savedInstanceState.getInt("mTies"); 
      mTurn = savedInstanceState.getChar("mTurn"); 
      } 
      displayScores(); 

     } 

     @Override 
    protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putCharArray("board", mGame.getBoardState()); 
    outState.putBoolean("mGameOver", mGameOver); 
    outState.putInt("mHumanWins",Integer.valueOf(mHumanWins)); 
    outState.putInt("mComputerWins",Integer.valueOf(mComputerWins)); 
    outState.putInt("mTies", Integer.valueOf(mTies)); 
    outState.putCharSequence("info", mInfoTextView.getText()); 
    outState.putChar("mTurn", mTurn); 
    } 

這裏是井字遊戲遊戲返回板狀態的方法:

public char[] getBoardState() { 
    return mBoard; 
} 

public void setBoardState(char[] board) { 
    mBoard = board.clone(); 
} 

預先感謝任何幫助。

+0

你保存前setBoardState? – 2013-03-15 22:15:10

+0

你能解釋一下嗎? – 2013-03-15 22:36:26

+0

您是否在調用過onSaveInstanceState之前通過調用setBoardState保存了您的主板狀態。例如,您可以在onSaveInstanceState中只記錄mBoard的第一個值,以查看是否有任何內容。 – 2013-03-15 22:44:35

回答

1

我認爲這個問題可能在你的setBoardGame方法中。 clone()方法返回類型「Object」,但mBoard的類型是「char []」(一個字符數組)。因此,你需要從Object類型強制轉換爲類型char []

試試這個:

public void setBoardState(char[] board) { 
    mBoard = (char[]) board.clone(); 
} 
+0

謝謝!現在就試試吧。 – 2013-03-15 23:18:11

+0

我很抱歉沒有這個運氣,但我感謝你的幫助。 – 2013-03-16 00:01:13

+0

有沒有其他人可以回答這個問題? – 2013-03-16 10:34:43

0

嘗試

public char[] getBoardState() { 
return mBoard.clone(); 

}