Issue
com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
is the error I keep getting when following the docs in attempting to retrieve data to an object for use.
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; }
}
Data on firebase for user:
and finally the code & line I get the error on is commented.
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)
Solution
The problem is that you are creating the property "mobile_phone" as a String and on Firebase it is a Long type.
Change:
private String mobile_phone;
To:
private Long mobile_phone;
Answered By - Iulian
Answer Checked By - David Marino (JavaFixing Volunteer)