Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Firebase数据库检索数据以显示标记?_Java_Android_Firebase_Google Maps Markers - Fatal编程技术网

Java 如何从Firebase数据库检索数据以显示标记?

Java 如何从Firebase数据库检索数据以显示标记?,java,android,firebase,google-maps-markers,Java,Android,Firebase,Google Maps Markers,我试图从我的Firebase数据库中检索纬度和经度,但我很难做到这一点。正如您在屏幕截图下所看到的,每张照片都有自己的ID,并附加到用户ID。我想在地图上用标记显示数据库中的所有位置。附在这是我的代码和我的数据库截图 数据库截图: 编辑:我根据要求添加了更多代码 public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener, GoogleMap.OnMarke

我试图从我的Firebase数据库中检索纬度和经度,但我很难做到这一点。正如您在屏幕截图下所看到的,每张照片都有自己的ID,并附加到用户ID。我想在地图上用标记显示数据库中的所有位置。附在这是我的代码和我的数据库截图

数据库截图:

编辑:我根据要求添加了更多代码

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener, GoogleMap.OnMarkerClickListener {
    private GoogleMap mMap;
    private ChildEventListener mChildEventListener;
    private DatabaseReference mUsersDataRef;
    private DatabaseReference mPhotosDataRef;

    private Map<String, User> mUsers = new HashMap<>(); //Map<(String) user-id, (User) user>
    private List<Photo> mPhotos = new ArrayList<>();

    private boolean usersFetched;
    private boolean photosFetched;

    private String photo_id;
    Marker marker;

尝试使用数据快照。可通过以下方式修改代码:

    if (usersFetched && photosFetched) {
        for (Photo photo : mPhotos) {
            User thisPhotosUser = mUsers.get(photo.getUser_id());

            thisPhotoUser.addListenerForSingleValueEvent(new ValueEvent Listner()){

                public void onDataChange(DataSnapshot datasnapshot){
                    for(Datasnapshot photos : dataSnapshot.getChildren()){

                        if(photos.child(thisPhotoUser.exists())){

                             LatLng location = new LatLng(mPhotosDataRef.child(getPhoto_id(isChild(latitude))),user.longitude);
            mMap.addMarker(newMarkerOptions().position(location).title(photo.name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));


                        }

                    }            


                }   

            }  

        }
    }

尝试使用数据快照。可通过以下方式修改代码:

    if (usersFetched && photosFetched) {
        for (Photo photo : mPhotos) {
            User thisPhotosUser = mUsers.get(photo.getUser_id());

            thisPhotoUser.addListenerForSingleValueEvent(new ValueEvent Listner()){

                public void onDataChange(DataSnapshot datasnapshot){
                    for(Datasnapshot photos : dataSnapshot.getChildren()){

                        if(photos.child(thisPhotoUser.exists())){

                             LatLng location = new LatLng(mPhotosDataRef.child(getPhoto_id(isChild(latitude))),user.longitude);
            mMap.addMarker(newMarkerOptions().position(location).title(photo.name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));


                        }

                    }            


                }   

            }  

        }
    }

请分享更多代码,包括您正在使用的引用。您好,第一次使用stackoverflow。我可以分享我的代码或者编辑我的帖子吗?是的,在标签下面有一个编辑按钮。签出。我就是这么做的:``public void onDataChange(DataSnapshot DataSnapshot){for(DataSnapshot ds:DataSnapshot.getChildren(){Marker Marker=ds.getValue(Marker.class);LatLng LatLng=new LatLng(marker.latitude(),marker.getLongitude());mMap.addMarker(new MarkerOptions().position(LatLng));}}```请共享更多代码,包括您正在使用的引用。您好,第一次使用stackoverflow。我可以分享我的代码或者编辑我的帖子吗?是的,在标签下面有一个编辑按钮。签出。我就是这么做的:``public void onDataChange(DataSnapshot DataSnapshot){for(DataSnapshot ds:DataSnapshot.getChildren(){Marker Marker=ds.getValue(Marker.class);LatLng LatLng=new LatLng(marker.latitude(),marker.getLongitude());mMap.addMarker(new MarkerOptions().position(LatLng));}```