从Firebase检索位置并将标记放在谷歌地图api上以供Android应用程序使用

时间:2018-03-16 15:14:20

标签: android firebase dictionary marker

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

这是图像Database structure

中的数据库结构

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

3 个答案:

答案 0 :(得分:0)

您可以拥有一个根并选择它。然后在该根目录中检索快照中的所有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();

    }
});

答案 1 :(得分:0)

EDITED 我建议对数据库结构进行一些小调整......在'MessProviders'下创建另一个名为'locations'的节点,其中包含userID,mProviderLatitude,mProviderLongitude,mProviderBrandName。   Dbstructure。 如果你有一个单独的getter和setter类,那将会很好。我的课程是'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) {

        }
    });
 }

答案 2 :(得分:0)

 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 ??