【问题标题】:How to retrieve data from firebase to google map?如何从firebase检索数据到谷歌地图?
【发布时间】:2017-04-21 14:40:47
【问题描述】:

我正在尝试将经纬度数据从 firebase 检索到我的谷歌地图,但是当我运行应用程序时,标记不会显示。

这是我的代码:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
    private FirebaseDatabase tracker;
    private DatabaseReference databaseLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        tracker = FirebaseDatabase.getInstance();
        databaseLocation = tracker.getReference("lokasi3");

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {
        databaseLocation.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot child : dataSnapshot.child("lokasi3").getChildren()) {
                    Lokasi3 lokasi3 = dataSnapshot.getValue(Lokasi3.class);
                    String latitude = child.child("latitude").getValue().toString();
                    String longitude = child.child("longitude").getValue().toString();
                    double loclatitude = Double.parseDouble(latitude);
                    double loclongitude = Double.parseDouble(longitude);
                    LatLng cod = new LatLng(loclatitude, loclongitude);
                    googleMap.addMarker(new MarkerOptions().position(cod).title(""));
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

【问题讨论】:

    标签: android google-maps firebase-realtime-database


    【解决方案1】:

    在 onCreate 中收听您的数据

     databaseLocation.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.child("lokasi3").getChildren()) {
                Lokasi3 lokasi3 = dataSnapshot.getValue(Lokasi3.class);
                String latitude = child.child("latitude").getValue().toString();
                String longitude = child.child("longitude").getValue().toString();
                double loclatitude = Double.parseDouble(latitude);
                double loclongitude = Double.parseDouble(longitude);
                LatLng cod = new LatLng(loclatitude, loclongitude);
                googleMap1.addMarker(new MarkerOptions().position(cod).title(""));
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    
    
    });
    
    
    
    
    
    GoogleMap googleMap1;//make it global
    
    @Override
    public void onMapReady(final GoogleMap googleMap) {
        googleMap1=googleMap;
    
    }
    

    【讨论】:

    • 嗨,兄弟。我尝试你的建议将它放在 onCreate 中,但标记仍然不会显示
    • marker1=gMap.addMarker(new MarkerOptions().position(new LatLng (dataSnapshot.child("latitude").getValue(double.class), dataSnapshot.child("longitude").getValue (double.class))) .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)).title("Bus 1")); marker1.showInfoWindow(); ---这对我有用。
    • 抱歉回复晚了,我的网络中断了这么久。所以你把它放在哪里?是它 onDataChange 吗?
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2012-03-09
    • 2019-06-14
    • 1970-01-01
    • 2014-09-02
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多