Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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_Geolocation - Fatal编程技术网

Java 如何在Firebase中实时存储位置?

Java 如何在Firebase中实时存储位置?,java,android,firebase,geolocation,Java,Android,Firebase,Geolocation,我正在使用Firebase的Android Studio。我已将我的项目链接到数据库,并完成了登录和注册的用户界面。用户现在可以注册了,我可以在Firebase中看到这一点。一旦用户登录,他们就可以看到MapsActivity(谷歌地图,他们可以跟踪自己的位置,但这个位置不存储在任何地方,我看了YouTube关于跟踪自己位置的教程) 问题:我真正想要的是,当用户注册时,他们的位置也会发送到数据库(因此每个用户都有一个称为位置的属性),这样当用户登录时,可以检索他/她自己的位置以跟踪位置 基本上,

我正在使用Firebase的Android Studio。我已将我的项目链接到数据库,并完成了登录和注册的用户界面。用户现在可以注册了,我可以在Firebase中看到这一点。一旦用户登录,他们就可以看到MapsActivity(谷歌地图,他们可以跟踪自己的位置,但这个位置不存储在任何地方,我看了YouTube关于跟踪自己位置的教程)

问题:我真正想要的是,当用户注册时,他们的位置也会发送到数据库(因此每个用户都有一个称为位置的属性),这样当用户登录时,可以检索他/她自己的位置以跟踪位置

基本上,Firebase应该在用户注册时存储位置,并在用户移动时不断更新。用户登录后,应检索位置(以便用户可以跟踪当前位置)。同样,当用户移动时,Firebase中的位置应该更新

我试着在网上查找,但似乎找不到解决方案

您可以使用。下面是一个简单的例子:

 LocationListener locationListener = new android.location.LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            // Push your location to FireBase
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    };
然后将locationListener传递给LocationManager

LocationManager locationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE);

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
这将监听GPRS和网络提供商的位置更改

要将更改推送到Firebase,可以按以下方式执行

private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference myRef = database.getReference();
当发布到数据库时,您必须唯一地标识一行,就像在普通数据库中一样(即ID、UUID),因此您必须生成一行并将其存储到您的
SharedReferences

public void postToDatabase(UserLocation location) {
    DatabaseReference usersRef = myRef.child(someUUID);
    usersRef.setValue(location);
}
要侦听更改,必须实现
ValueEventListener
。一个例子,但必须适应你的需要

ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                UserLocation location = new UserLocation();
                location.setLongitude((String) snapshot.child("longitude").getValue());
                location.setLatitude((String) snapshot.child("latitute").getValue());
               //Dispatch your changes in application, i.e with and EventBus
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    };

这就是我目前正在做的。我可以追踪我自己的位置。但我想将每个用户的位置存储在数据库中并检索…据我所知,您的问题是将您的位置推送到Firebase实时数据库并检查更改?您是否从Firebase实现了侦听数据库更改的
ValueEventListener
?我的问题是如何将位置存储到数据库中?编辑了答案,您现在可以查看,但我认为您可以在internet上找到大量有关此方面的资源。非常感谢。我试试这个,然后再打给你!:)