Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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-android?_Java_Android_Firebase_Google Maps_Firebase Realtime Database - Fatal编程技术网

Java 如何将谷歌地图标记的纬度和经度发送到Firebase-android?

Java 如何将谷歌地图标记的纬度和经度发送到Firebase-android?,java,android,firebase,google-maps,firebase-realtime-database,Java,Android,Firebase,Google Maps,Firebase Realtime Database,我想创建一个在线购物应用程序。我已经添加了一个MapActivity,以及当用户长时间单击某个点时在地图上添加标记的功能。我想将用户标记的纬度和经度发送到firebase,以存储在实时数据库中 public void onMapReady(final GoogleMap googleMap) { mMap = googleMap; mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

我想创建一个在线购物应用程序。我已经添加了一个MapActivity,以及当用户长时间单击某个点时在地图上添加标记的功能。我想将用户标记的纬度和经度发送到firebase,以存储在实时数据库中

public void onMapReady(final GoogleMap googleMap) {
    mMap = googleMap;

    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng latLng) {

            // First check if myMarker is null
            if (myMarker == null) {

                // Marker was not set yet. Add marker:
                myMarker = googleMap.addMarker(new MarkerOptions()
                        .position(latLng)
                        .title("Your marker title")
                        .snippet("Your marker snippet"));
                LatLng myLatLng = new LatLng(myMarker.getPosition().latitude,myMarker.getPosition().longitude);
            } else {

                // Marker already exists, just update it's position
                myMarker.setPosition(latLng);
                LatLng myLatLng = new LatLng(myMarker.getPosition().latitude,myMarker.getPosition().longitude);

            }
        }
    });
}

首先,定义
参考
位置

DatabaseReference myRef = FirebaseDatabase.getInstace().getRef().child("locations");
在这里,您可以通过
LatLng
获得位置:

LatLng myLatLng = new LatLng(myMarker.getPosition().latitude, myMarker.getPosition().longitude);
然后将其存储在数据库中:

myRef.child("your_location").child("Latitude").set(myLatLng.getLatitute); 
myRef.child("your_location").child("Longitude").set(myLatLng.getLongitude);
要检索信息,请执行以下操作:

myRef.child("your_location").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double latitude = dataSnapShot.getValue("Latitude", Double.class);
        double longitude = dataSnapShot.getValue("Longitude", Double.class);
        LatLng retrievedLang = new LatLng(latitude, longitude);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "loadLocation:onCancelled", databaseError.toException());
    }
})

事实上,我不记得Java语法,所以如果有一些奇怪的语法,请原谅我。但逻辑应该是这样的

    public void onMapLongClick(LatLng latLng) {
        if (myMarker == null) {
            ...
        } else {
            ...
        }
        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("myDatabase/someDirectory");

        MyMapPoint point = new MyMapPoint();
        point = new Point(latLng.latitude, latLng.longitude);
        usersRef.setValueAsync(point);
    }
class MyMapPoint(){
     String selectedLat, selectedLong;

     MyMapPoint(Long lat, Long long){
         selectedLat = lat;
         selectedLong = long;
     }
}
MyMapPoint是一个数据类。应该是这样的

    public void onMapLongClick(LatLng latLng) {
        if (myMarker == null) {
            ...
        } else {
            ...
        }
        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("myDatabase/someDirectory");

        MyMapPoint point = new MyMapPoint();
        point = new Point(latLng.latitude, latLng.longitude);
        usersRef.setValueAsync(point);
    }
class MyMapPoint(){
     String selectedLat, selectedLong;

     MyMapPoint(Long lat, Long long){
         selectedLat = lat;
         selectedLong = long;
     }
}

您使用的是
Firestore
还是
Realtime Database
?@GauravMall是一个标记变量。它是全局声明的。@GauravMall,它是实时数据库mate那么您收到的经度和纬度是多少?我是否需要插入更多代码才能将位置上载到数据库mate?还是就这些?就这些,很简单。您只需将它们存储为简单的值。@GauravMall firebase以长格式存储经度和纬度的值,因此您需要提供longI将它们存储为双值以提高准确性,这会影响什么吗?