当我更改Android的屏幕方向时,为什么我在画布上会出现空指针异常?

时间:2011-08-16 19:48:52

标签: android canvas orientation nullpointerexception

我的程序在以任何旋转/方向开始时运行得非常好,但是当我在运行时改变横向< - >肖像之间的方向时,由于我的画布,我得到一个空指针异常。

@Override
public void run(){
    while(running){
        if(surfaceHolder.getSurface().isValid()){
            Canvas canvas = surfaceHolder.lockCanvas();
            canvas.drawColor(Color.BLACK); //NULLPOINTEREXCEPTION here
            paint(canvas); //another function of mine
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }
}

我的清单中还有android:configChanges =“orientation”以及

@Override
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);
}

当我注释掉canvas.drawColor(Color.BLACK)时,将调用paint(canvas),然后在下一次在该函数中使用canvas时发生空指针异常。

帮助?

2 个答案:

答案 0 :(得分:3)

Javadoc for SurfaceHolder表示如果lockCanvas()尚未准备好,null将返回Canvas,因此您需要做好准备。它表示使用Callback.surfaceCreated()回调来了解何时使用Canvas是安全的。

答案 1 :(得分:1)

我建议看看这个帖子: Activity restart on rotation Android

具体为: 创建一个Application类并在那里移动画布初始化。

public class MyApplicationClass extends Application {
  @override
  public void onCreate() {
     super.onCreate();
     // TODO Put your application initialization code here.
  }
}