【发布时间】:2016-12-12 15:19:40
【问题描述】:
我正在尝试从 Firebase 中的 /User/ 树中检索我的用户详细信息。我有以下用户对象:
public class User {
private String name;
private String email;
private FirebaseUser firebaseUser;
private String lastOnline;
private LatLng latLng;
private ArrayList<SwapLocation> locations;
public User(){ }
public String getName(){
if(firebaseUser.getDisplayName() != null && !firebaseUser.getDisplayName().equals(""))
return firebaseUser.getDisplayName();
if(name != null && !name.equals(""))
return name;
return "";
}
public void setName(String name){
this.name = name;
}
public String getEmail(){
if(firebaseUser.getEmail() != null && firebaseUser.getEmail().equals(""))
return firebaseUser.getEmail();
if(email != null && email.equals(""))
return email;
return "";
}
public void setEmail(String email){
this.email = email;
}
public void setFirebaseUser(FirebaseUser firebaseUser){
this.firebaseUser = firebaseUser;
}
public FirebaseUser getFirebaseUser(){
return firebaseUser;
}
public void setLastOnline(String lastOnline){
this.lastOnline = lastOnline;
}
public String getLastOnline(){
if(lastOnline != null)
return lastOnline;
return "";
}
public void setLatLong(LatLng latlng){
this.latLng = latlng;
}
public LatLng getLatLong(){
return this.latLng;
}
public ArrayList<SwapLocation> getLocations(){
return locations;
}
public void setLocations(ArrayList<SwapLocation> locations){
this.locations = locations;
}
}
我正在尝试从 Firebase 中检索此对象。该对象是在 dataSnapshot 中检索到的,尽管它在序列化到我的用户对象时存在问题。
这就是我从 Firebase 检索对象的方式:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(users_group).child(user.getUid());
ref.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User this_user = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(DatabaseError databaseError) { }
});
但是当尝试执行“用户 this_user = dataSnapshot.getValue(User.class)”时,我收到一条错误消息,提示“用户缺少没有参数的构造函数”
任何帮助都会很棒,谢谢
【问题讨论】:
-
我无法解释为什么您会收到“缺少构造函数”错误。但我怀疑如果
FirebaseUser 不是您定义的简单 POJO 而实际上是com.google.firebase.auth.FirebaseUser,Firebase 是否能够序列化/反序列化您的User类。该类不是简单的 POJO,而且几乎可以肯定具有 Firebase 序列化程序无法处理的功能。 -
快速猜测是您的
User类是在另一个类中定义的。如果是这种情况,请将其标记为静态:static public class User {。此外,正如 qbix 评论的那样,我怀疑FirebaseUser是否满足序列化的数据库要求(如果这样做会有点酷),所以你必须@Exclude那。 -
啊该死的,这太糟糕了,因为我只想要一个用户对象。似乎我需要两个对象,一个 FirebaseUser 和一个 User 用于附加属性(因为用户可以在没有第 3 方身份验证的情况下登录,所以这些详细信息,例如姓名、电话等,需要存储在“用户”中的某个地方' 树)。或者替代方法是将 FirebaseUser 存储在我的 Users 对象中,并在调用 Firebase 时将其从 User 对象中剥离出来。嗯,你们认为最好的解决方案是什么?
标签: java android firebase firebase-realtime-database