Firebase DatabaseException:无法将 java.lang.Long 类型的值转换为字符串

新手上路,请多包涵

com.google.firebase.database.DatabaseException:无法将 java.lang.Long 类型的值转换为字符串

是我在按照文档尝试将数据检索到对象以供使用时不断遇到的错误。

这是我的对象模型

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; }

}

用户的 firebase 数据:

IMG 在这里 最后我得到错误的代码和行被注释掉了。

   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());

             ...

完整的堆栈跟踪:

 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)

原文由 Amy Spoiler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
2 个回答

问题是您将属性“mobile_phone”创建为字符串,而在 Firebase 上它是 Long 类型。

改变:

 private String mobile_phone;

至:

 private Long mobile_phone;

原文由 Iulian 发布,翻译遵循 CC BY-SA 3.0 许可协议

问题

  1. 如果您手动在 firebase 数据库中添加值,则这些值将是 long 数据类型;例如:

在此处输入图像描述

  1. 如果您通过命令添加值,这些值将作为字符串保存在数据库中。

解决方案:

当您从数据库中获取值时,将值保存为默认数据类型。然后,当您想要重用该值时,使用 toString() 方法将其更改为字符串。

原文由 Malik Faizan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题