Firebase Android获取未知密钥的值

时间:2018-03-01 18:27:02

标签: android firebase firebase-realtime-database

我的Firebase数据库中有一个对象列表,每个对象的键是一个时间戳。我可以使用limitToLast(1)获取最后一个,我得到的数据快照是:

{ key = time_stamps, value = {1510768441759={id=f454445c6e880df31e, coordinates={latitude=-4.1461734, longitude=20.5992437}}} }

1510768441759是时间戳。

如何阅读坐标?我试图将值转换为POJO,但我不能,因为时间戳对我来说是未知的,而在POJO中它将是属性的名称......

感谢。

2 个答案:

答案 0 :(得分:3)

如果你在没有父POJO但只使用坐标pojo的情况下这样做,你可以通过数据快照执行以下操作:

Query query = ref.child("time_stamps").orderByKey();
query.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot item: dataSnapshot.getChildren()){
      if (!dataSnapshot.hasChildren()) {
        return;
      }
      for(DataSnapshot childSnapShot :item.getChildren()){
        final String timestamp = childSnapShot.getKey();
        final DataSnapshot parentSnapShot = childSnapShot.child(timestamp);
        if (!parentSnapShot.hasChildren()) {
          continue;
        }
        Double latitude = parentSnapShot.child("latitude").getValue(Double.class);
        Double longitude = parentSnapShot.child("longitude").getValue(Double.class);
      }
    }


  }
  @Override
  public void onCancelled(DatabaseError databaseError) {

  }
});

答案 1 :(得分:0)

你有:

time_stamp
  1510768441759
      id: f454445c6e880df31e 
              coordinates
                 latitude=-4.1461734
                 longitude=20.5992437

试试这个,假设你没有1510768441759

 DatabaseReference reference = FirebaseDatabase.getInstance().getReference("time_stamp");
Query query = reference.orderByChild("id").equalTo(f454445c6e880df31e );
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot datas: dataSnapshot.getChildren()){
           String keys=datas.getKey();
          for(DataSnaphot ds :datas.getChildren()){
           String latitudes=ds.child("latitude").getValue().toString();
           String longitudes=ds.child("longitudes").getValue().toString();
            }
          }


    }
    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

如果您正在使用此datasnasphot time_stamp,则完成上述操作。首先,您执行查询以获取此id: f454445c6e880df31e的坐标。然后,由于你在这个datasnasphot time_stamp上,你必须循环一次才能检索到这个1510768441759,然后再次循环以获得纬度和经度。