我一直在尝试使用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文件中的所有内容,则该活动将正常运行,因此我认为问题不存在。
我该如何解决?
答案 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()
}