2017-05-06 2 views
0

Le géofire android onKeyEntered n'est jamais exécuté pour la requête queryLocation correspondante. Mais la méthode onGeoQueryReady est exécutée. Par conséquent, lorsque je clique sur le bottombar du menu, l'addGeoQueryEventListener est exécuté et la méthode onGeoQueryReady est exécutée. Mais la méthode onKeyEntered n'est jamais exécutée. Comme vous pouvez le voir dans la pièce jointe, j'ai l'emplacement dans le même nœud que le nœud de niveau supérieur. J'ai également inclus le chemin de l'enfant "xxx_location" dans la référence DB. ci-dessous sont ma version de l'API.Android GeoFire onKeyEntrer non déclenché

Geofire 2.1.1' 
firebase-core:9.0.2' 

code:

///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); 
      } 
     }); 

    } 

enter image description here

+0

Si vous n'obtenez aucune clé avant l'appel de 'onGeoQueryReady', cela signifie qu'aucune clé ne correspond à votre requête. –

+0

Merci. Comme vous pouvez le voir dans la capture d'écran, j'ai trois nœuds avec un nom comme ID avec 123 avec trois emplacements différents et ces ID sont à l'intérieur du nœud parallèle ci-dessous encore unkeyentered pas exécuté. J'essaie depuis de nombreuses semaines et pas de chance – user1439582

+0

Ouais, ça ne ressemble pas à un endroit qui a été écrit avec Geofire. Il vous manque les clés 'g', qui sont les géohases que Geofire utilise pour interroger. –

Répondre

2

Votre JSON manque les g clés, qui sont les geohashes que Geofire utilise pour interroger. Sans les touches g, aucune clé ne sera trouvée dans une requête.

Pour un exemple de la façon d'utiliser Geofire pour définir un emplacement dans la base de données, consultez le documentation:

geoFire.setLocation("firebase-hq", new GeoLocation(37.7853889, -122.4056973)); 

Si vous voulez savoir ce que setLocation le fait, voir son code: https://github.com/firebase/geofire-java/blob/8385c3148f816807ea3e1873c5e3772d76856057/src/main/java/com/firebase/geofire/GeoFire.java#L162