在Firebase回收器视图中获取孩子“ sonyTV”。
问题:这个孩子不是“用户”的直接孩子
输入名称和日期,但不输入“ sonyTV”
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder usersViewHolder, int i, @NonNull ALL_USERS all_users) {
usersViewHolder.setName(all_users.getName());
usersViewHolder.setDate(all_users.getDate());
usersViewHolder.setUserSoldItems(all_users.getUserSoldItems());
setUserSoldItems方法
public void setUserSoldItems(ALL_USERS.UserSoldItems userSoldItems) {
TextView SonyTvView = mView.findViewById(R.id.showTVsony);
SonyTvView.setText("Sony TV : "+userSoldItems);
}
ALL_USERS类
public class ALL_USERS {
private String name;
private long date;
private UserSoldItems userSoldItems;
public ALL_USERS() {}
public ALL_USERS(String name, long date, UserSoldItems userSoldItems) {
this.name = name;
this.date = date;
this.userSoldItems = userSoldItems;
}
public String getName() { return name; }
public long getDate() { return date; }
public UserSoldItems getUserSoldItems() { return userSoldItems; }
public class UserSoldItems {
private long sonyTV;
public UserSoldItems() {}
public UserSoldItems(long sonyTV) {
this.sonyTV = sonyTV;
}
public long getSonyTV() { return sonyTV; }
}
}
但是它给我空值,尽管您可以在我的数据库中检查它不是空值
这就是我发给孩子(“ sonyTV”)的方式
users.child(user.getUid()).child("UserSoldItems").child("sonyTV").runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
Long value = mutableData.getValue(Long.class);
if (value == null) {
mutableData.setValue(0);
}
else {
mutableData.setValue(value + 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
}
});
答案 0 :(得分:0)
根据您的问题:
亲爱的亚历克斯,我还有另一件事我无法在RecyclerView中获得子sonyTV,是因为它不是Users节点的直接子对象?? !!!
现在看到您要实现的目标,我想到的最简单的解决方案是在您的UserSoldItems
类中添加类型为User
的额外属性。因此,您的User
类应如下所示:
public class ALL_USERS {
private String name;
private long date;
private UserSoldItems userSoldItems;
public ALL_USERS() {}
public ALL_USERS(String name, long date, UserSoldItems userSoldItems) {
this.name = name;
this.date = date;
this.userSoldItems = userSoldItems;
}
public String getName() { return name; }
public long getDate() { return date; }
public UserSoldItems getUserSoldItems { return userSoldItems; }
}
UserSoldItems
应该看起来像这样:
public UserSoldItems {
private long sonyTV;
public UserSoldItems() {}
public UserSoldItems(int sonyTV) {
this.sonyTV = sonyTV;
}
public long getSonyTV() { return sonyTV; }
}
或更简单:
public UserSoldItems {
public long sonyTV;
}
请注意,节点的名称应为UserSoldItems
,不 User Sold Items
,以使其起作用。因此,不应包含任何空格。因此,添加数据时,请不要添加任何空格。最后,只需从数据库中清除实际数据并添加新数据即可。
因此,我们在JSON树中引入了新的UserSoldItems
级别,因此我们可以确保Java类对此进行反映。