gpt4 book ai didi

java - 从 Firebase 数据库中按 id 检索对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:45 25 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序,并尝试通过 ID 从其 Firebase 相关表中检索“User.java”类的对象。我找不到我做错了什么;有人可以帮我弄这个吗?我将非常感激。谢谢。

这是我收到的错误:

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.Double to type com.example.nidailyas.fitme.User

我的代码:

 DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot userDetails : dataSnapshot.getChildren()) {
User user = userDetails.getValue(User.class);
}
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

用户.java

import java.util.Date;
public class User {
String userId; //PK
String name;
Date dateOfBirth;
String gender;
double weight;
double height;
double begin_bp_upper;
double getBegin_bp_lower;
int score;
String planningId; //FK
String levelId; //FK
String profileImageUrl;
public User() {
}
public User(String userId, String name, Date dateOfBirth, String gender, double weight, double height, double begin_bp_upper, double getBegin_bp_lower, int score, String planningId, String levelId, String profileImageUrl) {
this.userId = userId;
this.name = name;
this.dateOfBirth = dateOfBirth;
this.gender = gender;
this.weight = weight;
this.height = height;
this.begin_bp_upper = begin_bp_upper;
this.getBegin_bp_lower = getBegin_bp_lower;
this.score = score;
this.planningId = planningId;
this.levelId = levelId;
this.profileImageUrl = profileImageUrl;
}

public String getProfileImageUrl() {
return profileImageUrl;
}

public String getUserId() {
return userId;
}

public int getScore() {
return score;
}

public String getPlanningId() {
return planningId;
}

public String getLevelId() {
return levelId;
}

public double getBegin_bp_upper() {
return begin_bp_upper;
}

public double getGetBegin_bp_lower() {
return getBegin_bp_lower;
}

public String getName() {
return name;
}

public Date getDateOfBirth() {
return dateOfBirth;
}

public String getGender() {
return gender;
}

public double getWeight() {
return weight;
}

public double getHeight() {
return height;
}
}

Firebase db looks like this:

最佳答案

通过使用数据库引用:

mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid())

您正在调用 users/{userId} 值,该值应从数据库返回单个用户对象。(考虑到您如何设计数据模式,这是正确的)

onDataChange 参数 dataSnapshot 返回用户对象,因此,当您调用 dataSnapshot.getChildren() 时,您请求的是用户对象的子对象,在这种特殊情况下,这将成为用户的属性(begin_bp_upper、dateOfBirth、性别等)。

大胆猜测,我假设抛出的异常是因为 User user = userDetails.getValue(User.class); 正在尝试将 begin_bp_upper 的值(这是一个 Double)转换为 User 类型。

因此,不要使用 for 语句,而是将 dataSnapshot 视为用户对象:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
User user = dataSnapshot.getValue(User.class);
}
}

关于java - 从 Firebase 数据库中按 id 检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49822648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com