2017-08-15 4 views
0

に長い変換するのに失敗し、クラスにマーシャルに私は、データベースから取得したデータをしようとしたとき、私は次のエラーFirebaseデータベース例外が、私はFirebaseリアルタイムデータベースを使用している文字列

FATAL EXCEPTION: main 
                    Process: com.example.tobias.run, PID: 17405 
                    com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String 
                     at com.google.android.gms.internal.zzbtg.zzaG(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg$zza.zze(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg$zza.zzaH(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zze(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
                     at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
                     at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
                     at com.example.tobias.run.history.HistoryFragment$2.onChildAdded(HistoryFragment.java:123) 
                     at com.google.android.gms.internal.zzbox.zza(Unknown Source) 
                     at com.google.android.gms.internal.zzbqx.zzZV(Unknown Source) 
                     at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
                     at android.os.Handler.handleCallback(Handler.java:751) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:241) 
                     at android.app.ActivityThread.main(ActivityThread.java:6274) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

を取得します。エラーがここに

databaseRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      dataSnapshot.getValue(TrackedRun.class); 
     } 

追跡実行クラス

public class TrackedRun implements Parcelable { 

private float mDistance; 
private long mTime; 
private long mDate; 
private int mRating; 
private String mUnit; 
private Integer mID = null; 

public TrackedRun(int id, long date, float distance, long time, int rating, String unit){ 
    this.mDistance = distance; 
    this.mTime = time; 
    this.mDate = date; 
    this.mRating = rating; 
    this.mUnit = unit; 
    this.mID = id; 
} 


public TrackedRun(){ 
    // Default constructor required for firebase calls to DataSnapshot.getValue(User.class) 
} 

public TrackedRun(Parcel in) { 
    this.mID = in.readInt(); 
    this.mDate = in.readLong(); 
    this.mDistance = in.readFloat(); 
    this.mTime = in.readLong(); 
    this.mRating = in.readInt(); 
    this.mUnit = in.readString(); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel parcel, int i) { 
    parcel.writeInt(mID); 
    parcel.writeLong(mDate); 
    parcel.writeFloat(mDistance); 
    parcel.writeLong(mTime); 
    parcel.writeInt(mRating); 
    parcel.writeString(mUnit); 
} 

@Exclude 
public static final Parcelable.Creator<TrackedRun> CREATOR = new Parcelable.Creator<TrackedRun>(){ 

    @Override 
    public TrackedRun createFromParcel(Parcel parcel) { 
     return new TrackedRun(parcel); 
    } 

    @Override 
    public TrackedRun[] newArray(int i) { 
     return new TrackedRun[i]; 
    } 
}; 

public float getDistance(){ 
    return mDistance; 
} 
public long getTime(){ 
    return mTime; 
} 
public long getDate(){ return mDate; } 
public int getRating(){ 
    return mRating; 
} 
public String getUnit(){ 
    return mUnit; 
} 
public Integer getId(){ return mID; } 


public void setDistance(String distance){ 
    mDistance = DateManager.distanceToFloat(distance); 
} 
public void setTime(String time){ 
    mTime = DateManager.timeToUnix(time); 
} 
public void setDate(String date){ 
    mDate = DateManager.dateToUnix(date); 
} 
public void setRating(String rating){ 
    mRating = Integer.valueOf(rating); 
} 

public void setUnit(String unit){ 
    mUnit = unit; 
} 

Firebase database structure

を発生し、私はintに持つ二つの長いフィールドを変更しようとしましたが、私は正確に同じエラーを得ました。 Parcelableを実装しているという事実とは何か?また、dataSnapshot.getValue().toString()を実行すると、すべてのフィールドが正しいデータ型にあります。

+0

すべてのエラーメッセージを入れてください –

+0

@ AhmedAbd-Elmegedをエラーメッセージ – tatarusanu1

答えて

1

セッターメソッドのパラメータタイプが、データベースの値と一致しません。たとえば:

public void setRating(String rating) { 
    mRating = Integer.valueOf(rating); 
} 

これはrating用DB内の文字列値を期待するFirebaseの原因となります。 Long値を見つけて、setRating()が必要とするStringにLongを変換できないことを報告します。 setDistance(),setTime()およびsetDate()についても同じ問題が存在します。

パラメータタイプまたはデータベース値を一貫性のあるものに変更します。

+0

で更新しました。ファイヤーベースはゲッターメソッドと呼ばれていました。ありがとう! – tatarusanu1

関連する問題