IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Kotlin Discussion :

Android studio - Kotlin - Invalid Firebase Database (Tuto Graven)


Sujet :

Kotlin

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Android studio - Kotlin - Invalid Firebase Database (Tuto Graven)
    Bonjour,
    ce message fait suite à un précédent sur une connexion impossible à Firebase.

    J'ai créé un projet en suivant le tuto de graven sur du Kotlin.
    J'ai trois fragment sur mon code, sur deux d'entre eux, j'arrive à interagir avec ma database Firebase mais sur la dernière qui me permet d'ajouter des éléments en base, j'ai une erreur.
    A noter également que le formulaire me permet d'ajouter des photos sur le storage Firebase (via Bucket) et ça fonctionne. A chaque essai, bien que l'appli s'arrête une fois que j'appui sur le bouton "terminer" la photo est bien stocké mais les autres informations n'arrivent pas en base et j'ai les messages suivants
    D/EGL_emulation: eglMakeCurrent: 0xe7a05600: ver 2 0 (tinfo 0xe7a03870)
    E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
    W/NetworkRequest: no auth token for request
    --------- beginning of crash
    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: fr.asmathvic.arakbet, PID: 4888
    com.google.firebase.database.DatabaseException: Invalid Firebase Database path: https://firebasestorage.googleapis.c...0-74bf8cea7879. Firebase Database paths must not contain '.', '#', '$', '[', or ']'
    at com.google.firebase.database.core.utilities.Validation.validatePathString(com.google.firebase:firebase-database@@19.2.1:45)
    at com.google.firebase.database.DatabaseReference.child(com.google.firebase:firebase-database@@19.2.1:102)
    at fr.asmathvic.arakbet.PlantRepository.insertPlant(PlantRepository.kt:94)
    at fr.asmathvic.arakbet.fragments.AddPlantFragment$sendForm$1.invoke(AddPlantFragment.kt:71)
    at fr.asmathvic.arakbet.fragments.AddPlantFragment$sendForm$1.invoke(AddPlantFragment.kt:52)
    at fr.asmathvic.arakbet.PlantRepository.uploadImage$lambda-2(PlantRepository.kt:80)
    at fr.asmathvic.arakbet.PlantRepository.$r8$lambda$IaW8al3iR-y22PA45nXW4WrV0QM(Unknown Source:0)
    at fr.asmathvic.arakbet.PlantRepository$$ExternalSyntheticLambda1.onComplete(Unknown Source:2)
    at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

    I/Process: Sending signal. PID: 4888 SIG: 9

    Dans mon "PlantRepository" qui me permet d'intéragir avec la BDD, j'ai ces éléments.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    class PlantRepository {
            // Donner le lien pour accéder au bucket
            private val BUCKET_URL: String ="gs://arXXXX-1932d.appspot.com"
            // Se connecter à notre espace de stockage
            val storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(BUCKET_URL)
        object Singleton{
            // Se connecter à la reférence "plants"
            val databaseRef = FirebaseDatabase.getInstance("https://arXXXX-1932d-default-rtdb.firebaseio.com/").getReference("plants")
            // Créer une liste qui va contenir nos plantes
            val plantList = arrayListOf<PlantModel>()
     
            // Contenir le lien de l'image courante
            var downloadUri: Uri?=null
        }
     
        fun updateData(callback: () -> Unit){
            // Absorber les données depuis la databaseRef pour les donner à notre liste de plantes
            databaseRef.addValueEventListener(object : ValueEventListener{
                override fun onDataChange(p0: DataSnapshot) {
     
                    //Retirer les ancienenes plantes
                    plantList.clear()
                    //Recolter la liste
                    for (ds in p0.children) {
                        //Construire un objet plante
                        val plant = ds.getValue(PlantModel::class.java)
                        //Vérifier que la plante n'est pas nulle
                        if (plant != null) {
                            //Ajouter la plante à la liste
                            plantList.add(plant)
                        }
                    }
                    //Actionner le Callback
                    callback()
                }
                override fun onCancelled(p0: DatabaseError) {}
     
            })
        }
     
        //Créer une fonction pour envoyer des fichiers sur le storage
        fun uploadImage(file:Uri, callback: () -> Unit){
            //Vérifier que ce fichier ne soit pas null
            if (file != null){
                val fileName = UUID.randomUUID().toString() + ".jpg"
                val ref = storageReference.child(fileName)
                val uploadTask = ref.putFile(file)
     
                // Demarer la tâche d'envoi
                uploadTask.continueWithTask(Continuation<UploadTask.TaskSnapshot, Task<Uri>>{ task ->
     
                // s'il y a eu un problème lors de l'envoi du fichier
                    if (!task.isSuccessful){
                        task.exception?.let { throw it}
                    }
     
                    return@Continuation ref.downloadUrl
                }).addOnCompleteListener { task ->
                    //Vérifier si tout a bien fonctionné
                    if (task.isSuccessful){
                        //Récupére l'image
                        downloadUri = task.result
                        callback()
                    }
                }
     
            }
     
        }
     
        //Mettre à jour un objet plante en bdd
        fun updatePlant(plant: PlantModel){
        databaseRef.child(plant.id).setValue(plant)
        }
        //Inserer une nouvelle plante en BDD
        fun insertPlant(plant: PlantModel){
            databaseRef.child(plant.id).setValue(plant)
        }
        //Supprimer une plante de la BDD
        fun deletePlant(plant: PlantModel) = databaseRef.child(plant.id).removeValue()
    }
    Je débute dans le développement, j'aimerai vraiment comprendre ce qui ne fonctionne pas afin d'avancer sereinement.
    Merci par avance, et hésitez pas à me demander des info complémentaires qui pourraient vous aider à analyser le problème.
    Merci

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut Android studio - Kotlin - Invalid Firebase Database
    Bonsoir,

    Je ne sais pas si ton problème est toujours d'actualité, mais s'il l'est, voila le code qui fonctionne correctement chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    class PlantRepository {
     
        object Singleton {
            // donner le lien pour acceder au bucket
            private val BUCKET_URL: String = "gs://nature-collection-7f652.appspot.com"
     
            // se connecter à notre espace de stockage
            val storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(BUCKET_URL)
     
            // se connecter à la référence "plants"
            val databaseRef=FirebaseDatabase.getInstance().getReference("plants")
     
            // créer une liste qui va contenir nos plantes
            val plantList = arrayListOf<PlantModel>()
     
            // contenir le lien de l'image courante
            var downloadUri: Uri? = null
        }
     
        fun updateData(callback: () -> Unit) {
            // absorber les données depuis la databaseRef -> liste de plantes
            databaseRef.addValueEventListener(object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    // retirer les anciennes plantes
                    plantList.clear()
     
                    // récolter la liste
                    for (ds in snapshot.children) {
                        // construire un objet plante
                        val plant = ds.getValue(PlantModel::class.java)
     
                        // verifier que la plante n'est pas null
                        if(plant != null) {
                            // ajouter la plante à notre liste
                            plantList.add(plant)
                        }
                    }
                    // actionner le callback
                    callback()
                }
     
                override fun onCancelled(error: DatabaseError) {}
     
            })
        }
     
        // creer une fonction pour envoyer des fichiers sur le storage
        fun uploadImage(file: Uri, callback:() -> Unit) {
            // verifier que ce fichier n'est pas null
            if(file != null) {
                val fileName = UUID.randomUUID().toString() + ".jpg"
                val ref = storageReference.child(fileName)
                val uploadTask = ref.putFile(file)
     
                // démarrer la tache d'envoi
                uploadTask.continueWithTask(com.google.android.gms.tasks.Continuation<UploadTask.TaskSnapshot, Task<Uri>> { task ->
     
                    // si il y a eu un pb lors de l'envoi du fichier
                    if(!task.isSuccessful) {
                        task.exception?.let { throw it }
                    }
     
                    return@Continuation ref.downloadUrl
     
                }).addOnCompleteListener { task ->
                    // verifier si tout a bien fonctionné
                    if(task.isSuccessful) {
                        // recuperer l'image
                        downloadUri = task.result
                        callback()
                    }
                }
            }
        }
     
        // mettre à jour un objet plante en BDD
        fun updatePlant(plant: PlantModel) = databaseRef.child(plant.id).setValue(plant)
     
        // inserer une nouvelle plante en BDD
        fun insertPlant(plant: PlantModel) = databaseRef.child(plant.id).setValue(plant)
     
     
        // supprimer une plante de la base
        fun deletePlant(plant: PlantModel) = databaseRef.child(plant.id).removeValue()
    }
    Bonne chance.

Discussions similaires

  1. Connexion Firebase impossible (Tuto Graven)
    Par le_fifex dans le forum Kotlin
    Réponses: 4
    Dernier message: 26/01/2022, 14h53
  2. Importer wsdl dans un projet Android Studio en Kotlin
    Par elscorpio dans le forum Kotlin
    Réponses: 1
    Dernier message: 21/03/2019, 15h38
  3. Réponses: 0
    Dernier message: 25/01/2019, 16h04
  4. Réponses: 2
    Dernier message: 03/01/2019, 17h21
  5. Réponses: 2
    Dernier message: 28/06/2017, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo