【发布时间】:2019-02-14 09:27:55
【问题描述】:
如何使用Geo Queries 获取靠近通过的GeoLocation(double lat, double lng) 的所有位置。
我有以下代码(它什么也没发生):
public void setCurrentLatLng(double lat, double lng){
this.lat = lat;
this.lng = lng;
GeoLocation geoLocation = new GeoLocation(lat, lng);
updateCurrenLocation(geoLocation);
GeoQuery geoQuery = geoFire.queryAtLocation(geoLocation, 8f);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
@Override
public void onDataEntered(DataSnapshot dataSnapshot, GeoLocation location) {
Log.d("geoQuery","onDataEntered "+dataSnapshot.toString());
// ...
}
@Override
public void onDataExited(DataSnapshot dataSnapshot) {
Log.d("geoQuery","onDataExited "+dataSnapshot.toString());
// ...
}
@Override
public void onDataMoved(DataSnapshot dataSnapshot, GeoLocation location) {
Log.d("geoQuery","onDataMoved "+dataSnapshot.toString());
// ...
}
@Override
public void onDataChanged(DataSnapshot dataSnapshot, GeoLocation location) {
Log.d("geoQuery","onDataChanged "+dataSnapshot.toString());
// ...
}
@Override
public void onGeoQueryReady() {
// ...
Log.d("geoQuery","onGeoQueryReady");
}
@Override
public void onGeoQueryError(DatabaseError error) {
Log.d("geoQuery","onGeoQueryError");
// ...
}
});
this.setChanged();
notifyObservers();
this.clearChanged();
Log.d("update","clearChanged");
}
如果需要,我想我可以修改数据结构。
日志
09-12 08:55:33.818 17710-17710/es.rchampa.weirdo D/geoQuery: lat=40.4430883 lng=-3.721805
09-12 08:55:33.982 17710-17710/es.rchampa.weirdo D/geoQuery: lat=40.4430883 lng=-3.721805
09-12 08:55:33.986 17710-17710/es.rchampa.weirdo D/geoQuery: onGeoQueryReady
09-12 08:55:34.025 17710-17710/es.rchampa.weirdo D/geoQuery: onGeoQueryReady
Gradle 文件
....
// Firebase
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.3'
implementation 'com.google.firebase:firebase-crash:16.2.0'
implementation 'com.google.firebase:firebase-core:16.0.3'
// Firebase UI
implementation 'com.firebaseui:firebase-ui-database:1.2.0'
//Firebase GeoFire
implementation 'com.firebase:geofire-android:2.3.1'
// Google Play Services
implementation 'com.google.android.gms:play-services-auth:16.0.0'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
....
更新
如果您愿意,我可以授予对我私人仓库的访问权限。
【问题讨论】:
-
您是否尝试从
onGeoQueryError()方法记录error?它打印什么? -
@AlexMamo 我已更新代码以添加日志。仅执行 onGeoQueryReady。有什么帮助吗?
-
我认为您设计数据库的方式正在产生问题。 stackoverflow.com/a/42632772/6082859
-
你能添加一些关于 lat、lng、geolocation 以及 geoquery 的日志并在此处发布日志吗?
-
@Nishita 设计没问题medium.com/google-cloud/…
标签: android firebase firebase-realtime-database geofire