从 Firebase 检索位置并在 google 地图 api 上为 android 应用程序放置标记

Retrieve location from Firebase and put marker on google map api for android application

我正在创建一个在线 Mess 应用程序,其中有两个登录名,一个用于 Mess 所有者,另一个用于用户,因此当 Mess 所有者将位置放在他的数据中时,用户端的地图上应该有标记。

这里是图片中的数据库结构Database structure

请建议我访问这些纬度 n 经度值的代码,并为每个用位置值注册的混乱在地图上创建标记。

您可以拥有一个根并 select 它。然后在该根目录中的快照中检索所有 lat/lng。这是一个示例代码:

DatabaseReference locationRef = mRootRef.child("locations");
locationRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
    @Override
    public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {


        for (DataSnapshot snapm: dataSnapshot.getChildren()) {

            Double latitude = snapm.child("0").getValue(Double.class);
            Double longitude = snapm.child("1").getValue(Double.class);
            }
        }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
        throw firebaseError.toException();

    }
});

已编辑 我提议对数据库结构进行小幅调整...在 'MessProviders' 下创建另一个名为 'locations' 的节点,其用户 ID、mProviderLatitude、mProviderLongitude、mProviderBrandName。 。 如果你有一个单独的 class 用于 getter 和 setter 就好了。我的 class 是 'CordinatesModel'

private void messLocation() {
DatabaseReference currentDBcordinates = FirebaseDatabase.getInstance().getReference().child("Users").child("MessProviders").child("locations");
    currentDBcordinates.addValueEventListener(new ValueEventListener() {
    @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            //Create an array of markers
            int size = (int) dataSnapshot.getChildrenCount(); //
            Marker[] allMarkers = new Marker[size];
            mMap.clear();   //Assuming you're using mMap 
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
               //Specify your model class here
                CordinatesModel cordinatesModel = new CordinatesModel();
                //lets create a loop
                 for(int i=0;i<=size;i++) {
                    try {
                        //assuming you've set your getters and setters in the Model class
                          cordinatesModel.setmProviderLatitude(s.getValue(CordinatesModel.class).getmProviderLatitude());
                        cordinatesModel.setmProviderLongitude(s.getValue(CordinatesModel.class).getmProviderLongitude());
                        cordinatesModel.setmProviderBrandName(s.getValue(CordinatesModel.class).getmProviderBrandName());
                        //lets retrieve the coordinates and other information
                         Double latitude1 = cordinatesModel.getmProviderLatitude();
                Double longitude1 = cordinatesModel.getmProviderLongitude();
                String brandName=cordinatesModel.getmProviderBrandName();
                        //convert the coordinates to LatLng
                        LatLng latLng = new LatLng(latitude1, longitude1);
                        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                        //Now lets add updated markers

                     //lets add updated marker
                        allMarkers[i] = mMap.addMarker(new MarkerOptions()
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)).position(latLng).title(brandName));enter code here
                 }catch (Exception ex){}
                 }


           }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
 }
 mDb = FirebaseDatabase.getInstance().getReference().child("Users").child("MessProviders").child("zZvkbgUbFohCwtYRfORUM0DBSZR2").child("ProfileInformation");
        mDb.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    String name = dataSnapshot.child("mProviderBrandName").getValue(String.class);
                    double latt = dataSnapshot.child("mProviderLatitude").getValue(Double.class);
                    double lngg = dataSnapshot.child("mProviderLongitude").getValue(Double.class);
                    mMap.addMarker(new MarkerOptions().position(new LatLng(latt, lngg)).title(name));

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

这是用于将标记放在地图上的代码,但问题是我手动提供用户 ID,因此我将只创建一个标记,但我想为每个用户创建标记系统如何获取用户 ID 和为每个用户 ID 创建标记 ??