web-dev-qa-db-fra.com

Firebase DatabaseException: Impossible de convertir la valeur de type Java.lang.Long en chaîne

com.google.firebase.database.DatabaseException: la conversion de type Java.lang.Long en chaîne a échoué

est l'erreur que je reçois toujours lorsque je suis la documentation en essayant de récupérer des données dans un objet pour les utiliser.

Voici mon modèle d'objet

public class User {

    private String tour_director_key;
    private String last_name;
    private String location_latitude;
    private String tour_id;
    private String photo;
    private String tour_director_name;
    private String middle_name;
    private String location_longitude;
    private String passenger_id;
    private long location_updated;
    private String tour_director;
    private String email;
    private String first_name;
    private String mobile_phone;
    private String td_id;

    public User() {
        // empty default constructor, necessary for Firebase to be able to deserialize users
    }

    public String getTour_director_key() {
        return tour_director_key;
    }
    public String getLast_name() {
        return last_name;
    }
    public String getLocation_latitude() {
        return location_latitude;
    }
    public String getTour_id() {
        return tour_id;
    }
    public String getPhoto() {
        return photo;
    }
    public String getTour_director_name() {
        return tour_director_name;
    }
    public String getMiddle_name() {
        return middle_name;
    }
    public String getLocation_longitude() {
        return location_longitude;
    }
    public String getPassenger_id() { return passenger_id; }
    public String getMobile_phone() { return mobile_phone; }
    public long getLocation_updated() {
        return location_updated;
    }
    public String getTour_director() {
        return tour_director;
    }
    public String getEmail() {
        return email;
    }
    public String getFirst_name() {
        return first_name;
    }
    public String getTd_id() { return td_id; }

}

Données sur firebase pour l'utilisateur:

 IMG HERE et enfin le code et la ligne sur laquelle l'erreur se produit sont commentés.

  Query userDataQuery = Constants.USER_REF.orderByKey().equalTo(mUserId);

  userDataQuery.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
         for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
             //// ERROR COMES FROM THE LINE BELOW ////
             User currentUser = postSnapshot.getValue(User.class);
             Log.i("THE_CURRENT_USER:::", currentUser.toString());
             Log.i("THE_USERS_EMAIL:::", currentUser.getEmail());

             ...

Full Stacktrace:

FATAL EXCEPTION: main
Process: app.timto.co.app, PID: 7453
com.google.firebase.database.DatabaseException: Failed to convert value of type Java.lang.Long to String
    at com.google.Android.gms.internal.zzaln.zzcc(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zzb(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zza(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zzb(Unknown Source)
    at com.google.Android.gms.internal.zzaln$zza.zze(Unknown Source)
    at com.google.Android.gms.internal.zzaln$zza.zzcc(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zzd(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zzb(Unknown Source)
    at com.google.Android.gms.internal.zzaln.zza(Unknown Source)
    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
    at app.timto.co.app.AttendanceActivity$1$1.onDataChange(AttendanceActivity.Java:112)
    at com.google.Android.gms.internal.zzaie.zza(Unknown Source)
    at com.google.Android.gms.internal.zzaje.zzcta(Unknown Source)
    at com.google.Android.gms.internal.zzajh$1.run(Unknown Source)
    at Android.os.Handler.handleCallback(Handler.Java:739)
    at Android.os.Handler.dispatchMessage(Handler.Java:95)
    at Android.os.Looper.loop(Looper.Java:148)
    at Android.app.ActivityThread.main(ActivityThread.Java:5417)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:726)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
4
Amy Spoiler

Le problème est que vous créez la propriété "mobile_phone" en tant que chaîne et que sur Firebase, il s'agit d'un type long.

Changement: 

private String mobile_phone;

À:

private Long mobile_phone;
9
Iulian Vărzaru

Problèmes

  1. Si vous ajoutez manuellement des valeurs dans la base de données firebase, les valeurs seront au type de données long; par exemple:

 enter image description here

  1. Si vous ajoutez des valeurs à l'aide de commandes, celles-ci seront enregistrées dans la base de données sous forme de chaîne.

Solution:

Lorsque vous obtenez les valeurs de la base de données, enregistrez-les dans le type de données par défaut. Ensuite, lorsque vous souhaitez réutiliser la valeur, modifiez-la dans la chaîne à l'aide de la méthode toString ().

4
Malik Faizan

Vérifiez si vos accesseurs et votre classe/modèle sont égaux dans la base de données firebase.

Lorsque method .getValue () récupère les données, il compare si les signatures sont identiques.

exemple:
En classe, nous avons un getLong
 enter image description here

pour récupérer la valeur dans la base de données firebase  enter image description here

4
Diego Venâncio

Pour moi, il s'agissait de choisir setText (CharSequence text) dans l'adaptateur qui a été utilisé pour renseigner la vue du recycleur. S'il vous plaît voir l'image ci-jointe pour plus de clarté  enter image description here

0
DragonFire