firebase按用户ID引用Child

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

这是我的firebase数据库。

Firebase database

 Query lastQuery = databaseReference.child("rawlocations").child("12345678").limitToLast(1);

lastQuery.addChildEventListener(new ChildEventListener() {
   @Override
   public void onChildAdded(DataSnapshot dataSnapshot, String s) {

    Double latt= (Double) dataSnapshot.child("lat").getValue();
    Double lngg= (Double) dataSnapshot.child("lng").getValue();
    LatLng location=new LatLng(latt,lngg);
});

在这个数据库中,位置每10米更新一次。现在我想引用最近更新的位置?我如何在我的代码中引用它?任何人都可以提供帮助吗?

android firebase firebase-realtime-database
2个回答
0
投票

如果您想获得单个ID的纬度和经度,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference idRef = rootRef.child("raw-locations").child("12345678");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double lat = ds.child("lat").getValue(Double.class);
            double lng = ds.child("lng").getValue(Double.class);
            Log.d("TAG", lat + " / " + lng);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
idRef.addListenerForSingleValueEvent(eventListener);

如果你想要所有id,你需要循环两次。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference rawRef = rootRef.child("raw-locations");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            for(DataSnapshot dSnapshot : ds.getChildren()) {
                double lat = dSnapshot.child("lat").getValue(Double.class);
                double lng = dSnapshot.child("lng").getValue(Double.class);
                Log.d("TAG", lat + " / " + lng);

            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
rawRef.addListenerForSingleValueEvent(eventListener);

0
投票

试试这个,它可以在我的代码中运行,并且可以帮助我孩子的每一个价值

 mDatabase.child("raw-locations").child("12345678").addValueEventListener(new ValueEventListener() {
                    final List<String> lstItems= new ArrayList<String>();

                    @Override
                    public void onDataChange(final DataSnapshot dataSnapshot) {

                        for(DataSnapshot ds : dataSnapshot.getChildren()) {
                            String name = (String) ds.getKey();
                            String values = (String) ds.getValue();
                            Log.e("Values",""+values );
                            lstItems.add(values );

                        }

你也可以改变这一行

String values = (String) ds.getValue();

有了这个

String Latvalue = (String) ds.child("lat").getValue();
© www.soinside.com 2019 - 2024. All rights reserved.