Сбой приложения при использовании CameraKit с Kotlin - PullRequest
1 голос
/ 26 июня 2019

Я пытался реализовать CameraKit в своем приложении, используя Kotlin.Я следовал этому учебнику.Он написан на 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 ]

1 голос
/ 26 июня 2019

Вам нужно инициализировать вид набора камеры.

делает это в kotlin:

var string : String

Разве я не инициализирую строку, просто строго набираю или определяю переменную.

Вы должны сообщить своей камере KitView, на что она ссылается.

Например, если ваш 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>

В вашем классе вы должны сделать это в своем учебном заведении:

также из моего личного опыта не забывайте остальную часть жизненного цикла:

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()
}
1 голос
/ 26 июня 2019

Вам не хватает

cameraKitView = findViewById(R.id.camera);

часть кода. Вы должны либо сделать это, либо использовать синтетику.

Вам также нужно изменить var cameraKitView на lateinit var cameraKitView

...