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

Amy*_*ler 8 java android firebase firebase-realtime-database

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

是在尝试将数据检索到对象以供使用时遵循文档时遇到的错误.

这是我的对象模型

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

}
Run Code Online (Sandbox Code Playgroud)

有关用户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());

             ...
Run Code Online (Sandbox Code Playgroud)

完整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)
Run Code Online (Sandbox Code Playgroud)

小智 17

问题是您将属性"mobile_phone"创建为String,而在Firebase上它是Long类型.

更改:

private String mobile_phone;
Run Code Online (Sandbox Code Playgroud)

至:

private Long mobile_phone;
Run Code Online (Sandbox Code Playgroud)

  • 是否可以自动将字符串转换为字符串? (2认同)

小智 6

问题

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

在此处输入图片说明

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

解:

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