Firebase Android获取未知密钥的值

问题描述 投票:1回答:2

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

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

其中1510768441759是时间戳。

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

谢谢。

android firebase firebase-realtime-database
2个回答
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) {

  }
});

等等


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,然后再次循环,以获得纬度和经度。

© www.soinside.com 2019 - 2024. All rights reserved.