【问题标题】:No empty constructor error, SurfaceHolder.callback没有空构造函数错误,SurfaceHolder.callback
【发布时间】:2014-04-24 01:38:35
【问题描述】:

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

查看活动:

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));
}

日志猫:

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

【问题讨论】:

    标签: android surfaceview glsurfaceview surfaceholder


    【解决方案1】:

    你有没有在你的 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)); }

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        您应该修改 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。

        【讨论】:

        • 我的表面视图扩展了视图而不是活动,正如您所建议的那样
        • 我对 SurfaceHolderActivity 中的“this.getHolder()”感到困惑,这个函数存在于 SurfaceView 但不存在于活动中。也许您可以更新您的自定义表面视图代码?
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 2012-07-14
          • 1970-01-01
          • 2013-06-25
          • 2020-06-09
          相关资源
          最近更新 更多