Java 使用'从Firebase下载列表;gdx fireapp';返回具有空字段的对象列表
我正在尝试使用library在应用程序中处理Firebase 我遵循了从中给出的示例。 我对“加载列表”示例有问题: 我创建了POJO“user”类并成功地在数据库中编写了一个用户…所以数据库包含一个1个用户的列表,所有字段都已填充(在数据库控制台中验证) 现在,当我尝试下载具有确切给定代码的用户列表时,我得到一个包含1个用户的列表(OK),所有字段都为空 下面是“用户”POJO类Java 使用'从Firebase下载列表;gdx fireapp';返回具有空字段的对象列表,java,firebase,firebase-realtime-database,libgdx,Java,Firebase,Firebase Realtime Database,Libgdx,我正在尝试使用library在应用程序中处理Firebase 我遵循了从中给出的示例。 我对“加载列表”示例有问题: 我创建了POJO“user”类并成功地在数据库中编写了一个用户…所以数据库包含一个1个用户的列表,所有字段都已填充(在数据库控制台中验证) 现在,当我尝试下载具有确切给定代码的用户列表时,我得到一个包含1个用户的列表(OK),所有字段都为空 下面是“用户”POJO类 public class UserPOJO{ public String username; public
public class UserPOJO{
public String username;
public String email;
public UserPOJO(){}
public UserPOJO(String username, String email){
this.username = username;
this.email = email;
}
}
下面是检索用户列表的代码:
public static void readUsersJava (){
GdxFIRDatabase.instance().inReference("users")
.filter(FilterType.LIMIT_FIRST, 5)
.readValue(List.class, new DataCallback<List<UserPOJO>>(){
@MapConversion(UserPOJO.class)
@Override
public void onData(List<UserPOJO> list) {
Gdx.app.log("Firebase Java", "read users OK");
}
@Override
public void onError(Exception e) {
Gdx.app.log("Firebase Java", "read users KO");
}
});
}
publicstaticvoid readUsersJava(){
引用(“用户”)中的gdxFirdDatabase.instance()
.filter(FilterType.LIMIT_FIRST,5)
.readValue(List.class,new DataCallback(){
@映射转换(UserPOJO.class)
@凌驾
公共无效onData(列表){
log(“Firebase Java”,“读取用户OK”);
}
@凌驾
公共无效申报人(例外e){
log(“Firebase Java”,“读取用户KO”);
}
});
}
由于我知道用户的Id,我可以尝试使用
GdxFIRDatabase.instance().inReference("users/Xc4x0IOm...")
.readValue(UserPOJO.class, new DataCallback<UserPOJO>() {...}
参考(“用户/Xc4x0IOm…”)中的GDXFirdDatabase.instance()
.readValue(UserPOJO.class,新的DataCallback(){…}
但是这样做,我得到了“java.lang.ClassCastException:java.util.HashMap不能强制转换为UserPOJO”。这可能就是字段为空的原因:无法强制转换…但我找不到如何消除此错误 谁能帮帮我吗?好的,我找到了这个: 查询答案是一个
Hashmap
所以我不得不:
对于列表查询,这似乎是必需的
publicstaticvoid readUsersJava(){
setUsersMapConverter()
引用(“用户”)中的gdxFirdDatabase.instance()
.orderBy(OrderByMode.ORDER\u BY\u键,空)
.filter(FilterType.LIMIT_FIRST,5)
.readValue(List.class,new DataCallback(){
...
});
}
及
fun setUsersMapConverter(){
GdxFIRDatabase.instance().setMapConverter(对象:FirebaseMapConverter{
覆盖有趣的转换(映射:可变映射,wantedType:Class):T{
val元素=(map.get(map.keys.first())作为HashMap
将UserPOJO(element.get(“displayName”)、element.get(“email”)返回为T
}
//应为转换反转(仅GWT平台需要)
override fun unsert(`object`:Any):映射{
返回空
}
})
}
希望这能有所帮助
如果你能找到更好的解决方案,请告诉我。这就是我迄今为止所发现的
public void getUserInfo() {
GdxFIRDatabase.instance().inReference("users")
.readValue(List.class, new DataCallback <List<UserInfo>>() {
@MapConversion(UserInfo.class)
@Override
public void onData( List<UserInfo> userInfo) {
System.out.println(userInfo.size());
}
@Override
public void onError(Exception e) {
}
});
}
我发现,为了从数据库中读取列表中的用户,必须以增量方式保存用户。如果增量跳转超过2,则无法工作
users - 1 - x - "x"
- y - "y"
- 2 - x - "xx"
- y - "yy"
- 3 - ...
希望这对现在有所帮助。我正在试图找出如何将增量值更改为用户的uid,并读取列表中的用户,但这对我还不起作用。我希望有人能帮我解决这个问题
如果用户像这样保存在数据库中
users - uid1 - x - "x"
- y - "y"
- uid2 - x - "xx"
- y - "yy"
- uid3 - ...
我无法使用上面相同的代码读取列表中的用户,但我可以使用下面的代码读取每个用户
public void getUserInfo(GdxFirebaseUser user) {
GdxFIRDatabase.instance().inReference("users/" + )
.readValue(List.class, new DataCallback <List<UserInfo>>() {
@MapConversion(UserInfo.class)
@Override
public void onData( List<UserInfo> userInfo) {
System.out.println(userInfo.size());
}
@Override
public void onError(Exception e) {
}
});
public void getUserInfo(GdxFirebaseUser){
GdxFIRDatabase.instance().inReference(“users/”+)
.readValue(List.class,新数据回调(){
@映射转换(UserInfo.class)
@凌驾
公共无效onData(列出用户信息){
System.out.println(userInfo.size());
}
@凌驾
公共无效申报人(例外e){
}
});
更新:奥德比,上面说的对我有用。谢谢
users - 1 - x - "x"
- y - "y"
- 2 - x - "xx"
- y - "yy"
- 3 - ...
users - uid1 - x - "x"
- y - "y"
- uid2 - x - "xx"
- y - "yy"
- uid3 - ...
public void getUserInfo(GdxFirebaseUser user) {
GdxFIRDatabase.instance().inReference("users/" + )
.readValue(List.class, new DataCallback <List<UserInfo>>() {
@MapConversion(UserInfo.class)
@Override
public void onData( List<UserInfo> userInfo) {
System.out.println(userInfo.size());
}
@Override
public void onError(Exception e) {
}
});