2017-05-06 18 views
0

android geofire onKeyEntered는 queryLocation과 일치하도록 실행되지 않습니다. 그러나 onGeoQueryReady 메소드가 실행됩니다.Android GeoFire onKeyEntered가 trigged되지 않음

그래서 메뉴 바텀 바를 클릭하면 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); 
      } 
     }); 

    } 

enter image description here

+0

'onGeoQueryReady'가 호출되기 전에 키를 얻지 못하면 쿼리에 맞는 키가 없다는 것을 의미합니다. –

+0

감사합니다. 스크린 샷에서 볼 수 있듯이, 3 개의 다른 ID를 가진 123 개의 이름이있는 노드가 있으며이 ID는 병렬 노드 아래에 있으며 여전히 실행되지 않고 계속 실행됩니다. 나는 수 주일 동안 노력했지만 행운이 없었습니다. – user1439582

+0

그래, Geofire로 작성된 곳이 아닌 것 같습니다. Geofire가 쿼리하는 데 사용하는 geohases 인 'g'키가 없습니다. –

답변

2

귀하의 JSON은 Geofire 쿼리하는 데 사용하는 geohashes있는 g 키를이 없습니다. g 키가 없으면 모든 쿼리에서 키를 찾을 수 없습니다. 데이터베이스의 위치를 ​​설정 Geofire을 사용하는 방법의 예를 들어

documentation 참조 : 당신이 setLocation가 무엇을 알고 싶은 경우

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

, 해당 코드를 참조하십시오 https://github.com/firebase/geofire-java/blob/8385c3148f816807ea3e1873c5e3772d76856057/src/main/java/com/firebase/geofire/GeoFire.java#L162