2013-03-15 69 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(); 

}