2017-05-06 4 views
0

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

    } 

enter image description here

+0

'onGeoQueryReady'が呼び出される前にキーを取得しなかった場合は、クエリに一致するキーがないことを意味します。 –

+0

ありがとうございます。あなたがスクリーンショットで見ることができるように、私は名前が3つのノードを123の3つの異なる場所に持っていて、これらのIDはまだ実行されていないonkeyenteredの下の並列ノードの内側にあります。私は何週間も無駄にしようとしていました – user1439582

+0

ええ、それはGeofireで書かれた場所のようには見えません。 Geofireがクエリに使用するgeohasesである 'g'キーがありません。 –

答えて

2

あなたのJSONはGeofireを照会するために使用するgeohashesあるgキーを、欠けています。 gキーがなければ、どのクエリでもキーが見つかりません。 https://github.com/firebase/geofire-java/blob/8385c3148f816807ea3e1873c5e3772d76856057/src/main/java/com/firebase/geofire/GeoFire.java#L162

:そのコードを参照して、

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

あなたはsetLocationが何を知りたい場合は、次のdocumentationを参照して、データベース内の場所を設定するためにGeofireを使用する方法の例については

関連する問題