1
votes

Pourquoi ma base de données ne fonctionne pas, j'utilise des moyens dans la documentation officielle?

J'ai un problème: la base de données Firebase ne fonctionne pas et je ne comprends pas pourquoi cela s'est produit (impossible de publier des données sur le serveur, lorsque j'appuie sur le bouton pour envoyer des données - rien ne se passe, les données ne sont pas enregistrées dans serveur).

Regardez mon code:

"rules": {
   ".read": true,
   ".write": true
 }           

Ma classe de constructeur pour envoyer des données à une base de données:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:padding="40dp"
 android:orientation="vertical"
 android:gravity="center"
 android:layout_height="match_parent">

 <ImageView
    android:layout_width="200dp"
    android:src="@color/cardview_dark_background"
    android:layout_marginBottom="30dp"
    android:layout_height="200dp"/>

 <EditText
    android:layout_width="match_parent"
    android:id="@+id/item_name"
    android:text="Description"
    android:layout_height="wrap_content"/>

 <EditText
    android:text="Name of product"
    android:layout_width="match_parent"
    android:id="@+id/item_description"
    android:layout_height="wrap_content"/>

 <Button
    android:id="@+id/add_item_to_db_button"
    android:layout_width="match_parent"
    android:text="Add"
    android:layout_height="wrap_content"/>

</LinearLayout>

Mes dépendances ( google () et jcenter () Est activé dans Gradle code>):

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'


// Firebase
implementation 'com.google.firebase:firebase-analytics:17.2.2'
implementation 'com.google.firebase:firebase-database:19.2.1'
implementation 'com.google.firebase:firebase-auth:19.2.0'
implementation 'com.google.firebase:firebase-core:17.2.2'
implementation 'com.firebaseui:firebase-ui:0.6.2'
implementation 'com.google.android.gms:play-services-gcm:17.0.0'
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.firebaseui:firebase-ui-auth:4.3.1'

}

apply plugin: 'com.google.gms.google-services'   

Mon fichier XML :

 class Member {
 lateinit var itemName: String
 lateinit var itemDescription: String

constructor()
constructor(itemName: String, itemDescription: String) {
    this.itemName = itemName
    this.itemDescription = itemDescription
  }

} 
Et enfin, les règles de base de données:
private var db = FirebaseDatabase.getInstance()                                               
private lateinit var dbReference: DatabaseReference                                           

override fun onCreate(savedInstanceState: Bundle?) {                                          
 super.onCreate(savedInstanceState)                                                        
 setContentView(R.layout.activity_main)                                                    
 setSupportActionBar(toolbar)                                                              

 dbReference = db.reference.child("member")                                                

 add_item_to_db_button.setOnClickListener {                                                 
     dbReference.push()                                                                    
         .setValue(Member(item_name.text.toString(), item_description.text.toString()))    

 }                                                                                         
}  

Je ne comprends pas pourquoi db ne fonctionne pas. J'ai essayé de plusieurs façons a été publié dans StackOverflow - n'aide pas.


19 commentaires

wat ne fonctionne pas


Désolé, j'ai mis à jour une question. Les données ne sont pas publiées dans la base de données. Après avoir cliqué sur le bouton, rien ne se passe.


Votre projet est-il connecté à Firebase?


Sûr. Je suis connecté à mon projet.


Vous êtes sûr de ne pas manquer FirebaseApp.initializeApp (this) ? Si c'est le cas, collez-le simplement comme première ligne dans OnCreate ou dans Application Class.


Pouvez-vous essayer ça? dbReference.setValue (Membre (nom_élément.text.toString (), description_élément.text.toString ()))


Sec, je vais l'essayer


Désolé, n'a pas aidé.


Pouvez-vous essayer ceci s'il vous plaît? dbReference = db.getReference.child ("membre") au lieu de dbReference = db.reference.child ("membre")


A essayé. référence dans Kotlin en utilisant à la place getReference () \ setReference () .


Ma dernière idée est que vous devriez utiliser ce code dans la méthode onCreate. private var db = FirebaseDatabase.getInstance ()


A essayé. Ça n'aide pas.


Tout d'abord, arrêtez d'ignorer les erreurs potentielles. Essayez d'attacher un écouteur à l'opération de valeur définie, obtenez-vous quelque chose imprimé dans le logcat? Veuillez également répondre avec @AlexMamo


Vérifiez quel identifiant unique est généré lors du push et s'il réussit les données de publication Même si saveValue échoue, vous déboguez avec la clé ex DatabaseReference pushPostRef = postsRef.push (); // Récupère l'identifiant unique généré par un push () String postId = pushPostRef.getKey ();


De même que vous utilisez dbReference.push (). SetValue, ajoutez un onCompleteListener pour voir si l'appel réussit.


@ Build3r, ok je vais l'essayer.


Avez-vous essayé d'afficher votre base de données à partir de votre console de projet? J'ai eu ce même problème avec mon application Web au cours des 5 dernières heures. Je ne peux même pas voir mes données sur la console de la base de données de mon projet


@sudo_kaizen, oui, je vérifie toutes les mises à jour dans la console.


Essayez d'ajouter des écouteurs de complétion et consignez les résultats pour obtenir plus de contexte: firebase .google.com / docs / database / android /…


4 Réponses :


0
votes

Vous avez besoin d'un réseau valide et de cette autorisation dans vos fichiers manifestes. Vérifiez votre fichier manifeste.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


1 commentaires

Désolé, ça n'aide pas.



0
votes

Remplacez votre classe par une classe de données:

data class Member(val itemName : String, val itemDescription : String) {
constructor() : this("", "")
}


1 commentaires

A essayé. Ça n'aide pas. Dans ce cas, situation très intéressante, car im dans le projet précédent utilise un constructeur similaire à ce que j'ai en ce moment, et tout a bien fonctionné.



1
votes

Eh bien, toutes les personnes qui ont essayé de m'aider - merci beaucoup;) Dans mon cas, tous les moyens ne m'ont pas aidé, alors j'ai essayé de connecter Firebase DB à un autre compte Google puis connectez Firebase Database , résultat - tout fonctionne bien.


0 commentaires

-1
votes

J'ai rencontré ce problème. Mais je ne trouve pas de solution permanente. De la communauté Firebase, j'ai reçu un e-mail.

Nous avons reçu plusieurs rapports du même problème avec différents fournisseurs de FAI en Inde, mais il s'agit d'un problème avec le réseau des FAI qui est hors de notre portée et de notre contrôle, néanmoins nous travaillons avec des fournisseurs locaux pour essayer de restaurer les services dès que possible, pour cela nous recueillons autant d'informations que possible sur le problème, nous vous serions reconnaissants de bien vouloir nous fournir le nom de votre FAI.

Nous vous recommandons de contacter votre FAI pour demander plus de détails et d'informations sur le dépannage afin de trouver la cause principale de ce problème, car nous pouvons confirmer que le problème n'est pas de notre côté.

Toutes nos excuses pour ne pas pouvoir vous aider davantage, mais assurez-vous que nous travaillons toujours pour le remettre en marche.


0 commentaires