我收到此错误,因为我使用unique key
函数,所以我认为它无法从firebase
中读取push()
。实际上,它有一个来自用户的唯一ID,在其下还有一个由推功能生成的唯一ID。
W / ClassMapper:在课程上找不到-LX96YLmx5G_w8yEDTgi的设置程序/字段 com.official.roomv1.Caller.Advertise 在com.official.roomv1.Caller.Advertise类上找不到-LX95gJQNfc9sN81LY3_的设置器/字段 在com.official.roomv1.Caller.Advertise类上找不到-LX95T40zIbRfCRmZpFo的设置器/字段。
这是针对android应用的。它可以读取push()
函数中未使用唯一键的其他数据。
public DatabaseHelper() {
firebaseDatabase = FirebaseDatabase.getInstance();
reference = firebaseDatabase.getReference("Property");
}
public void readProperty(final DataStatus dataStatus){
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
property.clear();
List<String> keys = new ArrayList<>();
for (DataSnapshot keyNode : dataSnapshot.getChildren()){
keys.add(keyNode.getKey());
Advertise advertise = keyNode.getValue(Advertise.class);
property.add(advertise);
}
dataStatus.DataIsLoaded(property,keys);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这是我当前的数据库测试
答案 0 :(得分:0)
我看不到您在哪里使用 push()。但是您必须从那里获取按下键。
以下是获取按键的方法:
String pushID= reference.push().getKey();
然后,您在这里进行更新:
reference.pushID.addValueEventListener(new ValueEventListener() { ..... }
您添加了推送ID,就可以使用特定的方式来处理数据。希望你能理解。
答案 1 :(得分:0)
您的JSON似乎具有两个嵌套级别:
因此,基本上,您似乎为每个用户提供了一个属性列表。这意味着您的代码需要两个循环:一个循环用于用户,一个循环用于该用户的属性。
在代码中:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
property.clear();
List<String> propertyKeys = new ArrayList<>();
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()){
for (DataSnapshot propertySnapshot : userSnapshot.getChildren()){
propertyKeys.add(propertySnapshot.getKey());
Advertise advertise = propertySnapshot.getValue(Advertise.class);
property.add(advertise);
}
}
dataStatus.DataIsLoaded(property, propertyKeys);
}