J'essaie de créer une simple application de caméra sur Android à l'aide de Kotlin. Je ne suis pas capable de convertir du code Java en Kotlin.
Comment puis-je déclarer code Java: p> Code de kotlin: p> Je ne suis pas capable de le définir comme un var, il lance Seul (?.) ou des appels non nuls affirmés (!!) sont autorisés sur un récepteur nullable de type cameradevice? < / em>
Et je ne suis pas capable de le déclarer dans la fonction, jette la même erreur. p> p>
3 Réponses :
cameradevice strong> peut être null à tout moment. Vous devrez donc affirmer NOT NULL afin d'exécuter votre code. Mais assurez-vous que CamerAdevice n'est jamais nulle ici.
Ainsi, utilisez votre code comme ci-dessous @Override
public void onOpened(CameraDevice camera) {
//This is called when the camera is open
cameraDevice!! = camera;
randomFunction();
}
Cela ne dit pas vraiment op comment l'initialiser où ils le déclarent
Vous manquez le val cameradevice: cameradevice? = null code>
Lorsque vous faites ce Si vous souhaitez initialiser tard, vous pouvez faire de cette façon P> VAL code> La variable a besoin initial
initialisation code> signifie que vous avez attribuer une valeur à la déclaration
et après la
initialisation code> de variable, vous ne pouvez pas modifier la valeur de celui-ci. p>
lateinit var cameraDevice:CameraDevice //this does not required initialization at initial level
J'ai également pensé à liétinit code>, mais cela ne fonctionne que si la variable a été initialisée dans
OnOpened code>. Si cela ne va que dans
onerror code>, il va crancer.
Vous devez utiliser si vous rencontrez des barinit code> pour
cameradevice code> comme ceci:
Onerror code>, Vous vérifiez si
cameradevice code> a été initialisé et seulement ensuite appelez
ferme () code> pour éviter d'obtenir un
uninitialisépropertyaccessException code>. p>
Utilisez
var cameradevice: cameradevice? = null code> et l'utiliser comme
cameradevice? .close () code>. Si vous utilisez VAL B>, vous ne pouvez pas le réaffecter comme
cameradevice = caméra code>
Pouvez-vous expliquer pourquoi pas vous voulez le déclarer comme
var code>?