android geofire onKeyEnteredは、照合するqueryLocationに対して決して実行されません。しかし、onGeoQueryReadyメソッドが実行されます。Android GeoFire onKeyEnteredはトリガーされていません
メニューのボトムバーをクリックすると、addGeoQueryEventListenerが実行され、onGeoQueryReadyメソッドが実行されます。しかし、onKeyEnteredメソッドは決して実行されません。添付ファイルでわかるように、私はトップレベルノードと同じノードに位置しています。また、DB参照に子パス "xxx_location"も含めました。以下は私のAPIバージョンです。
Geofire 2.1.1'
firebase-core:9.0.2'
コード:
///geofire connection
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
DatabaseReference refLowLevel = ref.child("xxxxx_location");
if (refLowLevel!=null) {
GeoFire geoFire = new GeoFire(refLowLevel);
// creates a new query around [37.7832, -122.4056] with a radius of 0.6 kilometers
geoQuery = geoFire.queryAtLocation(new GeoLocation(37.12314,-122.49182),1.80);
Log.i(TAG, "query-------->"+geoQuery);
markers = new HashMap<String, Marker>();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
Log.i(TAG, "inside painter onkeynetered-------->");
//Marker marker = map.addMarker(new MarkerOptions().position(new LatLng(location.latitude, location.longitude)));
//markers.put(key, marker);
}
@Override
public void onKeyExited(String key) {
Log.i(TAG, "inside painter onkeyexited-------->");
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
System.out.println(String.format("Key %s moved within the search area to [%f,%f]", key, location.latitude, location.longitude));
}
@Override
public void onGeoQueryReady() {
Log.i(TAG, "inside painter onqueryready-------->");
}
@Override
public void onGeoQueryError(DatabaseError error) {
System.err.println("There was an error with this query: " + error);
}
});
}
'onGeoQueryReady'が呼び出される前にキーを取得しなかった場合は、クエリに一致するキーがないことを意味します。 –
ありがとうございます。あなたがスクリーンショットで見ることができるように、私は名前が3つのノードを123の3つの異なる場所に持っていて、これらのIDはまだ実行されていないonkeyenteredの下の並列ノードの内側にあります。私は何週間も無駄にしようとしていました – user1439582
ええ、それはGeofireで書かれた場所のようには見えません。 Geofireがクエリに使用するgeohasesである 'g'キーがありません。 –