0
votes

getdata () ne fonctionne pas depuis la migration vers Kotlin

Je suis nouveau à Kotlin. J'ai écrit ce code qui obtiendra l'image du sélecteur d'images. Mais je reçois une erreur en ligne: Val FilePath: URI = ATTR.DATA.GETDATA () CODE> Erreur: référence non résolue. Existe-t-il une modification de Kotlin parce que ce code fonctionnait correctement en Java (désigne que j'ai migré vers kotlin)

et une autre erreur sur Imagestore (bitmap) code> Erreur: Smart Cast to Bitmap est impossible. p>

J'ai recherché une documentation mais je n'ai pas pu résoudre ces 2 problèmes. P>

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK && requestCode == 1) {
        val filePath: Uri = attr.data.getData()

        try {
            val inputStream: InputStream? = contentResolver.openInputStream(filePath)
            bitmap = BitmapFactory.decodeStream(inputStream)
            imageStore(bitmap)
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        }
    }
}


3 commentaires

S'il vous plaît poster votre trace logcat où le problème existe


@Quicklearner je n'ai pas exécuté le code. L'erreur arrive à IDE (lignes rouges sous textes et conseil à outils I.e. Suggestions (actions de contexte))


@techfangirl Si ma réponse a résolu toutes vos problèmes, veuillez la marquer comme une réponse


3 Réponses :


1
votes

Mais je reçois une erreur en ligne: Val FilePath: URI = ATTR.DATA.GETDATA () Erreur: Référence non résolue

Eh bien, cela signifie que le compilateur ne peut pas comprendre ce que vous parlez de. Est-il correct de dire cela?

Eh bien, vous envisagez de ne pas avoir d'objet nommé attr Il semblerait que le compilateur est correct.

Ceci signifie que vous devez supprimer la partie attr , quelque chose comme: xxx

Le retour ici arrêtera d'exécuter le reste de la méthode si les données de l'intention de l'intention est null

pour résoudre votre deuxième problème, vous aurez besoin de quelque chose comme ceci: xxx

Qu'est-ce que cela fait?

Eh bien, il vous donne un accès sans fil à votre objet bitmap et vous garantit également que l'instance n'est pas nulle.


2 commentaires

Comme je l'ai mentionné, j'ai codé cela en Java il y a quelques mois et que maintenant, j'utilise simplement «migrer vers Kotlin». Caractéristique du studio Android. Le code (avant la migration) fonctionne correctement sans erreur


Oui, l'outil de migration n'est pas parfait, j'essaie de vous apprendre à aborder ces problèmes à l'avenir en expliquant ce que référence non résolu signifie @techfangirl :)



0
votes

Remplacer cette ligne Val FilePath: URI = ATTR.DATA.GETDATA () CODE> avec

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK && requestCode == 1) {
        val filePath: Uri = data!!.getData()!!

        try {
            val inputStream: InputStream? = contentResolver.openInputStream(filePath)
            var bitmap = BitmapFactory.decodeStream(inputStream)
            imageStore(bitmap)
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        }
    }
}


1 commentaires

Type Mismatch: URI requise



0
votes

Comme @a_local_nobody a déclaré "l'outil de migration n'est pas parfait", j'ai appris les bases de Kotlin et j'ai constaté que le code suivant fonctionne bien pour moi. XXX


0 commentaires