2017-08-15 24 views
0

我使用火力地堡实时数据库和我收到以下错误火力地堡数据库异常未能长转换为字符串

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) 

当试图马歇尔为I类从数据库中检索到的数据。这里出现的错误

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

您的setter方法的参数类型与数据库中的值不一致。例如:

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

这将导致火力地堡,以期待rating一个数据库中的字符串值。它找到一个Long值并报告它不能将Long转换为setRating()所需的字符串。 setDistance(),setTime()setDate()存在同样的问题。

将参数类型或数据库值更改为一致。

+0

认为firebase只调用getter方法。谢谢! – tatarusanu1