web-dev-qa-db-ja.com

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 HERE そして最後に、エラーが発生したコードと行がコメント化されます。

  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)
8
Amy Spoiler

問題は、プロパティ「mobile_phone」を文字列として作成し、FirebaseではLong型であるということです。

変化する:

private String mobile_phone;

に:

private Long mobile_phone;
17
Iulian Vărzaru

問題点

  1. Firebaseデータベースに値を手動で追加する場合、値はlongデータ型になります。例えば:

enter image description here

  1. コマンドで値を追加する場合、値はデータベースに文字列として保存されます。

解決:

データベースから値を取得するとき、デフォルトのデータ型で値を保存します。次に、値を再利用する場合は、toString()メソッドを使用して値を文字列に変更します。

6
Malik Faizan

Firebaseデータベースでゲッターとクラス/モデルが等しいかどうかを確認します。

メソッド。getValue()がデータを取得するとき、署名が同じかどうかを比較します。

例:
クラスにはgetLongがあります
enter image description here

firebaseデータベースで値を取得するには enter image description here

4
Diego Venâncio

allを追加して、DBエントリを編集します二重引用符 like "phone" : "900000000"そしてそれは問題を解決するので、例えば:

"phone" : 900000000
"name" : "xxxx",
"password" : 111111

変更後:

"phone" : "900000000",
"name" : "xxxx",
"password" : "111111"
1
Andromo Tech

オブジェクトを作成せずに直接データにアクセスする場合は、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;
0
Tariqul

私にとっては、アダプターでsetText(CharSequence text)を選択していましたが、これはリサイクラービューの設定に使用されていました。明確にするために添付の画像をご覧ください enter image description here

0
DragonFire