从Firebase检索数据并创建标记

时间:2019-07-11 07:11:03

标签: java android firebase firebase-realtime-database

我想问一下如何从Firebase检索数据以获取特定数据。 我的Firebase数据库如下所示。My firebase database is look like this.。 我想在圈子中检索数据。

完整的Firebase看起来像这样。 enter image description here

我想尝试的是使用datasnapshot和value eventlistener从Firebase调用数据。

private void getMarkerFromDb()
    {
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference dataMarker = FirebaseDatabase.getInstance().getReference();

        if (getIntent()!=null) {

            lrpTest = (LRP_model) getIntent().getSerializableExtra("lrp");

            DatabaseReference routeRef = dataMarker.child("LRP")
                    .child(userId)
                    .child("route_models");
            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (int counter =0; counter<dataSnapshot.getChildrenCount();counter++) {
                        for (DataSnapshot ss : dataSnapshot.child("route_models").getChildren()) {
                            double latitude = ss.child("rtLat").getValue(Double.class);
                            double longitude = ss.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
    }

输出未显示任何内容。

1 个答案:

答案 0 :(得分:0)

更改此:

            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (int counter =0; counter<dataSnapshot.getChildrenCount();counter++) {
                        for (DataSnapshot ss : dataSnapshot.child("route_models").getChildren()) {
                            double latitude = ss.child("rtLat").getValue(Double.class);
                            double longitude = ss.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

对此:


            DatabaseReference routeRef = dataMarker.child("LRP")
                    .child(userId);

            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for (DataSnapshot ss : dataSnapshot.getChildren()) {
                            for (DataSnapshot datas : ss.child("route_models").getChildren()) {
                            double latitude = datas.child("rtLat").getValue(Double.class);
                            double longitude = datas.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                          }
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

更改对节点userId的引用,然后在其内部进行两次迭代以访问route_models属性。