将CameraKit与Kotlin一起使用时应用崩溃

时间:2019-06-26 14:32:23

标签: android kotlin android-camera android-camera2

我一直在尝试使用Kotlin在我的应用程序中实现CameraKit。我正在关注this教程。它是用Java编写的,所以我将其转换为Kotlin。

这是教程中的main_activity.java:

import com.camerakit.CameraKitView;
public class MainActivity extends AppCompatActivity {

    private CameraKitView cameraKitView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        cameraKitView = findViewById(R.id.camera);
    }

    @Override
    protected void onResume() {
        super.onResume();
        cameraKitView.onResume();
    }

    @Override
    protected void onPause() {
        cameraKitView.onPause();
        super.onPause();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

这是我的cameraScreen.kt文件,相当于上面的代码的Kotlin:

package com.example.testapp
import com.camerakit.CameraKitView
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle


class cameraScreen : AppCompatActivity() {

    private var cameraKitView:CameraKitView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_camera_screen)
        cameraKitView = findViewById(R.id.camera)
    }

    override fun onResume() {
        super.onResume()
        cameraKitView.onResume()
    }

    override fun onPause() {
        super.onPause()
        cameraKitView.onPause()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        cameraKitView.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }
}

我在private var cameraKitView:CameraKitView行上收到此错误

  

财产必须被初始化或抽象化

这是我到目前为止尝试过的

  • 尝试使用lateinit-应用程序崩溃
  • 尝试使用abstract-应用程序崩溃
  • 试图将行放在init{...}块中。然后较低的功能看不到它。

请记住,所有这些相机内容都在另一个活动中,我正在使用一个按钮将其链接到我的主要活动。如果我删除了cameraScreen.kt文件中的所有内容,则该活动将正常运行,因此我认为问题不存在。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您缺少

cameraKitView = findViewById(R.id.camera);

部分代码。您应该这样做或使用合成材料。

您还需要将var cameraKitView更改为lateinit var cameraKitView

答案 1 :(得分:1)

您需要初始化摄像头套件视图。

在Kotlin中这样做:

var string : String

不是初始化字符串,而是强烈地键入或定义变量。

您需要告诉您的cameraKitView它指的是什么。

例如,如果您的XML如下所示:

<com.camerakit.CameraKitView
        android:id="@+id/cv_cameraview"
        android:keepScreenOn="true"
        app:camera_facing="back"
        app:camera_flash="auto"
        app:camera_focus="continuous"
        app:camera_permissions="camera">
</com.camerakit.CameraKitView>

在您的课堂上,您需要在oncreate中执行此操作:

根据我的个人经验,请不要忘记生命周期的其余部分:

private lateinit var cameraKitView: CameraKitView

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_punch)

    cameraKitView = cv_camerkit

}

override fun onStart() {
    super.onStart()
    cameraKitView.onStart()

}

override fun onResume() {
    super.onResume()
    cameraKitView.onResume()

}

public override fun onPause() {
    cameraKitView.onPause()
    super.onPause()
}

override fun onStop() {
    cameraKitView.onStop()
    super.onStop()
}