Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 数独游戏开始时崩溃_Android - Fatal编程技术网

Android 数独游戏开始时崩溃

Android 数独游戏开始时崩溃,android,Android,大家好,我是android的初学者,我正在做一个基本的数独应用程序来学习android,当我开始游戏时发现自己被卡住了..应用程序崩溃了。。!!!! 每当我尝试启动游戏时,它就会崩溃并将我带回模拟器的菜单屏幕。请有人帮我解决这个问题 提前谢谢 以下是我的代码: puzzleview.java package org.example.sudoku; public class puzzleview extends View { private static final String TAG="S

大家好,我是android的初学者,我正在做一个基本的数独应用程序来学习android,当我开始游戏时发现自己被卡住了..应用程序崩溃了。。!!!! 每当我尝试启动游戏时,它就会崩溃并将我带回模拟器的菜单屏幕。请有人帮我解决这个问题

提前谢谢

以下是我的代码:

puzzleview.java

package org.example.sudoku;

public class puzzleview extends View {
private static  final String TAG="SUDOKU";

private float width;
private float height;
private int selX;
private int selY;
private final Rect selRect= new Rect();

private final Game game;

public puzzleview(Context context){
    super(context);
    this.game=(Game) context;
    setFocusable(true);
    setFocusableInTouchMode(true);
}
@Override
protected void onSizeChanged(int w,int h,int oldh,int oldw){
width = w/9f;
height = h/9f;
getRect(selX, selY, selRect);
Log.d(TAG, "onSizeChanged width " + width +", height "+ height);
super.onSizeChanged(w, h, oldw, oldh);
}

private void getRect(int selX2, int selY2, Rect selRect2) {
// TODO Auto-generated method stub

}
@Override
protected void onDraw(Canvas canvas){
Paint background=new Paint();
background.setColor(getResources().getColor(R.color.puzzle_background));
canvas.drawRect(0,0, getWidth(), getHeight(), background);


Paint dark = new Paint();
dark.setColor(getResources().getColor(R.color.puzzle_dark));

Paint hilite = new Paint();
hilite.setColor(getResources().getColor(R.color.puzzle_hilite));

Paint light = new Paint();
light.setColor(getResources().getColor(R.color.puzzle_light));


for (int i = 0; i < 9; i++) {
canvas.drawLine(0, i * height, getWidth(), i * height,
     light);
canvas.drawLine(0, i * height + 1, getWidth(), i * height
     + 1, hilite);
canvas.drawLine(i * width, 0, i * width, getHeight(),
     light);
canvas.drawLine(i * width + 1, 0, i * width + 1,
     getHeight(), hilite);
}
for(int i=0; i<9; i++){
if(i%3!=0)
  continue;
canvas.drawLine(0,i*height,getWidth(),i*height,dark);
canvas.drawLine(0, i * height + 1, getWidth(), i * height
      + 1, hilite);
canvas.drawLine(i * width, 0, i * width, getHeight(), dark);
canvas.drawLine(i * width + 1, 0, i * width + 1,
      getHeight(), hilite);
}

Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG);
foreground.setColor(getResources().getColor(R.color.puzzle_foreground));
foreground.setStyle(Style.FILL);
foreground.setTextSize (height * 0.75f);
foreground.setTextScaleX(width/height);
foreground.setTextAlign(Paint.Align.CENTER);

FontMetrics fm=foreground.getFontMetrics();
float x=width/2;
float y=height/2 - (fm.ascent+fm.descent)/2;

for(int i=0;i<9;i++){

 for(int j = 0;j<9;j++){

Line 95 ---->:   canvas.drawText(this.game.getTileString(i, j), i
             * width + x, j * height + y, foreground);

      }
 }
}
}

这取决于如何使用视图,但如果在XML中使用视图,则需要添加另一个构造函数

public puzzleview(Context context, AttributeSet attrs){
    super(context, attrs);
    this.game=(Game) context;
    setFocusable(true);
    setFocusableInTouchMode(true);
}

我可以想象第95行访问了一些尚未初始化的内容。当应用程序启动时。开始时,它很可能会尝试渲染puzzleview。据猜测,
game
此时尚未完全初始化,因此对
game.getTileString(i,j)
的访问以某种方式失败。您可能希望在
Game
中有一个标志,它告诉
puzzleview
何时可以使用
getTileString
,您可以在
puzzleview.onDraw()中使用它:

if(game.getTileStringsAvailable()){

对于(int i=0;我也是,请发布整个堆栈跟踪。@jbabey canvas.drawText(this.game.getTileString(i,j),i*width+x,j*height+y,foreground);@zamilnizar你打算指出第95行还是我们应该计数?@Siddharth请阅读前面提到的评论:06-09 12:07:21.541:E/AndroidRuntime(2519):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)发布整个堆栈跟踪怎么样我读了整篇文章,我仍然不会数到95。没有整个堆栈,你每次都在等待。你还需要多少次同样的请求。
public puzzleview(Context context, AttributeSet attrs){
    super(context, attrs);
    this.game=(Game) context;
    setFocusable(true);
    setFocusableInTouchMode(true);
}
if (game.getTileStringsAvailable()) {
    for (int i=0;i<9;i++){
        for (int j = 0;j<9;j++){
            canvas.drawText(this.game.getTileString(i, j), i * width + x, j * height + y, foreground);
        }
    }
}