【发布时间】:2017-11-08 17:50:44
【问题描述】:
我正在使用 Firebase 为 Android 应用程序实现一个数据库。
我展示了 2 个 bean:User.class 和 Address.class,由应用程序使用:
@IgnoreExtraProperties
public class User {
@Exclude
private String idAccount;
private String firstname;
private String lastname;
private String pseudo;
private Address address;
private List<Qualification> qualification;
private boolean isWorker;
// Constructors + getters + setters
}
和
public class Address {
private String houseNumber;
private String street;
private String city;
private String zip;
private String country;
// Constructors + getters + setters
}
所以,我可以使用usersRef.child(idUser).setValue(user) 在数据库中添加一个用户,其中usersRef 是我对数据库中用户的引用(See result)
我还可以通过ValueEventListener 获取用户:
Query query = usersRef.child(idUser);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
result.call(user);
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
所以,现在一切正常!
但是,如果我尝试在我的usersRef 上添加一个ChildEventListener,我就会崩溃:
usersRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
User user = dataSnapshot.getValue(User.class); // crash here
}
}
...
}
致命异常:PID:29470 com.google.firebase.database.DatabaseException:无法转换对象 类型为 java.lang.String 的类型为 ca.uqac.sosdoit.data.Address 在 com.google.android.gms.internal.zzear.zzb(未知来源) 在 com.google.android.gms.internal.zzear.zza(未知来源) 在 com.google.android.gms.internal.zzear.zzb(未知来源) 在 com.google.android.gms.internal.zzeas.zze(未知来源) 在 com.google.android.gms.internal.zzear.zzb(未知来源) 在 com.google.android.gms.internal.zzear.zza(未知来源) 在 com.google.firebase.database.DataSnapshot.getValue(未知来源) 在 ca.uqac.sosdoit.database.DatabaseManager$1.onChildAdded(DatabaseManager.java:68) 在 com.google.android.gms.internal.zzdri.zza(未知来源) 在 com.google.android.gms.internal.zzdwu.zzbvb(未知来源) 在 com.google.android.gms.internal.zzdxa.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:808) 在 android.os.Handler.dispatchMessage(Handler.java:103) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5292) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 在 dalvik.system.NativeStart.main(Native Method)
我完全不知道为什么
【问题讨论】:
-
尝试使用
Map<String, String> valueMap = (HashMap<String, String>) dataSnapshot.getValue();调试,找到地址节点。
标签: android firebase firebase-realtime-database