【问题标题】:save the state of the board for orientation保存电路板的状态以进行定向
【发布时间】:2013-03-15 21:39:51
【问题描述】:

您好,我是 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);
    }

以下是tictactoe游戏中返回棋盘状态的方法:

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

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

提前感谢您的帮助。

【问题讨论】:

  • 保存前设置BoardState了吗?
  • 你能再解释一下吗?
  • 你有没有在调用 onSaveInstanceState 之前通过调用 setBoardState 来保存你的棋盘状态。例如,您可以在 onSaveInstanceState 中仅记录 mBoard 的第一个值,以查看那里是否有任何内容。
  • 谢谢,我会尝试,但我不是很擅长调试,因为调试器在我的机器上非常慢。再次感谢。
  • 你所要做的就是声明一个类成员,比如 private static final String TAG = "Tic tac toe";然后在 onSaveInstanceState 中放入以下 ​​Log.d(TAG, "mBoard first element = " + mBoard[0]);并查看您的 logcat 以查看它打印的内容。

标签: android savestate


【解决方案1】:

我认为问题可能出在您的 setBoardGame 方法中。 clone() 方法返回类型“Object”,但 mBoard 是类型“char[]”(字符数组)。因此,您需要从类型 Object 转换为类型 char[]

试试这个:

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

【讨论】:

  • 很抱歉没有运气,但感谢您的帮助。
  • 还有谁能回答这个问题吗?
【解决方案2】:

试试

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2022-01-14
    • 2017-12-29
    相关资源
    最近更新 更多