没有空构造函数错误,SurfaceHolder.callback

时间:2014-04-24 01:38:35

标签: android surfaceview glsurfaceview surfaceholder

我正在尝试使用类扩展surfaceview显示摄像机视图并实现surfaceholder.callback。在我的主要活动ViewActivity中,如下所示,我从SurfaceHolderActivity实例化一个对象,并使用setContentView(myCameraSurfaceHolder);将其设置为一个视图。在设备上运行应用程序时,它会崩溃并且logcat会在no empty constructor中显示错误。请帮我找错。

ViewActivity:

private SurfaceHolderActivity myCameraSurfaceHolder;
    private android.hardware.Camera myCamera;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE );
        requestWindowFeature( Window.FEATURE_NO_TITLE );
        getWindow().setFormat(PixelFormat.TRANSPARENT);
        getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                WindowManager.LayoutParams.FLAG_FULLSCREEN );

        myCameraSurfaceHolder = new SurfaceHolderActivity(this);
        setContentView(myCameraSurfaceHolder);
    }

SurfaceHolderActivity:

public SurfaceHolderActivity(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    this.mySurfaceHorder = this.getHolder();
    this.mySurfaceHorder.addCallback(this);
    //this.mySurfaceHorder.setType(mySurfaceHorder.SURFACE_TYPE_PUSH_BUFFERS);
    //this.mySurfaceHorder.setFormat(mySurfaceHorder.setFormat(PixelFormat.TRANSLUCENT));
}

logcat的:

04-24 04:34:07.406: E/AndroidRuntime(21420): FATAL EXCEPTION: main
04-24 04:34:07.406: E/AndroidRuntime(21420): java.lang.RuntimeException: Unable to 
instantiate activity    omponentInfo{com.example.augrealtest00/com.example.augrealtest00.SurfaceHolderActivity}: 
java.lang.InstantiationException: can't instantiate class 
 com.example.augrealtest00.SurfaceHolderActivity; no empty constructor

4 个答案:

答案 0 :(得分:0)

您是否在 SurfaceHolderActivity 中尝试了此操作:

public SurfaceHolderActivity(Context context) { super(context); // TODO Auto-generated constructor stub this.mySurfaceHorder = this.getHolder(); this.mySurfaceHorder.addCallback( 上下文 ); //this.mySurfaceHorder.setType(mySurfaceHorder.SURFACE_TYPE_PUSH_BUFFERS); //this.mySurfaceHorder.setFormat(mySurfaceHorder.setFormat(PixelFormat.TRANSLUCENT)); }

答案 1 :(得分:0)

您无法直接实例化活动!您永远不会使用构造函数构造活动,因此您无法使用构造函数传递参数。请访问http://developer.android.com/guide/components/activities.html#Creating以了解如何创建活动。

答案 2 :(得分:0)

不要让SurfaceView扩展Activity - 你应该扩展SurfaceView,而不是Activity!

logcat消息显示您正在尝试创建一个类extends Activity,但您没有提供默认构造函数(没有参数的构造函数)。所以Android框架无法创建您的活动!。

您应该修改SurfaceholderActivity类并扩展SurfaceView而不是Activity。如果您在活动标记中添加了SurfaceHolderAcitivty,则可能会修改AndroidManifest.xml。

尝试修改您的代码:

public class SurfaceHolderActivity extends SurfaceView implements Callback {

    private SurfaceHolder mySerfaceHolder;

    public SurfaceHolderActivity(Context context) {
        super(context);
        this.mySerfaceHolder = this.getHolder();
        this.mySerfaceHolder.addCallback(this);     
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // TODO some implementation...
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO some implementation...
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO some implementation...
    }
}

我建议你将SurfaceHolderActivity重命名为MySurfaceView,因为它应该是View而不是Activity。

答案 3 :(得分:0)

我的错误是,在清单文件中,类SurfaceView被放置为主要活动,而它不是活动,它只是一个类。我刚刚以ViewActivity是我的主要活动的方式修改了清单文件。它工作正常。感谢所有提供帮助的人。