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のデータ:
そして最後に、エラーが発生したコードと行がコメント化されます。
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)
問題は、プロパティ「mobile_phone」を文字列として作成し、FirebaseではLong型であるということです。
変化する:
private String mobile_phone;
に:
private Long mobile_phone;
allを追加して、DBエントリを編集します二重引用符 like "phone" : "900000000"
そしてそれは問題を解決するので、例えば:
"phone" : 900000000
"name" : "xxxx",
"password" : 111111
変更後:
"phone" : "900000000",
"name" : "xxxx",
"password" : "111111"
オブジェクトを作成せずに直接データにアクセスする場合は、Stringを使用してデータ型をlong.classに変更できます。
`String reward = ds.child("reward").getValue(String.class);`
to
`long reward = ds.child("reward").getValue(long.class);`
または
public String reward;
to
public long reward;