Java 如何在Firebase中实时存储位置?
我正在使用Firebase的Android Studio。我已将我的项目链接到数据库,并完成了登录和注册的用户界面。用户现在可以注册了,我可以在Firebase中看到这一点。一旦用户登录,他们就可以看到MapsActivity(谷歌地图,他们可以跟踪自己的位置,但这个位置不存储在任何地方,我看了YouTube关于跟踪自己位置的教程) 问题:我真正想要的是,当用户注册时,他们的位置也会发送到数据库(因此每个用户都有一个称为位置的属性),这样当用户登录时,可以检索他/她自己的位置以跟踪位置 基本上,Firebase应该在用户注册时存储位置,并在用户移动时不断更新。用户登录后,应检索位置(以便用户可以跟踪当前位置)。同样,当用户移动时,Firebase中的位置应该更新 我试着在网上查找,但似乎找不到解决方案 您可以使用。下面是一个简单的例子:Java 如何在Firebase中实时存储位置?,java,android,firebase,geolocation,Java,Android,Firebase,Geolocation,我正在使用Firebase的Android Studio。我已将我的项目链接到数据库,并完成了登录和注册的用户界面。用户现在可以注册了,我可以在Firebase中看到这一点。一旦用户登录,他们就可以看到MapsActivity(谷歌地图,他们可以跟踪自己的位置,但这个位置不存储在任何地方,我看了YouTube关于跟踪自己位置的教程) 问题:我真正想要的是,当用户注册时,他们的位置也会发送到数据库(因此每个用户都有一个称为位置的属性),这样当用户登录时,可以检索他/她自己的位置以跟踪位置 基本上,
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上找到大量有关此方面的资源。非常感谢。我试试这个,然后再打给你!:)