2016-08-15 32 views
2

通過火力的Git進出口工作遇到一些問題之後, 這是我的數據庫: databaseGeoFire和火力地堡使用率找到最近的用戶

在我定義

geoFire.setLocation("firebase-hq", new GeoLocation(lat, lang)); 

編輯開始時:後很少修復,伊爾尖銳的問題... 我試圖找到所有的用戶在一定的用戶,經過一些修復後,確實找到了每個人,但它也發現自己... 我如何設法避免添加我自己的用戶(或從找到的用戶中刪除我自己的用戶密鑰......) 這裏是代碼(希望能更好地解釋這個問題,因爲英文不是我的母語)。 runnersNearby都在這個半徑用戶...

 mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mAuth = FirebaseAuth.getInstance(); 
     double lat = gpsTracker.getLatitude(); 
     double lang = gpsTracker.getLongitude(); 
     mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("latitude").setValue(lat); 
     mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("longitude").setValue(lang); 
     mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("Availability").setValue(true); 
     geoFire.setLocation(uid, new GeoLocation(lat, lang)); 
     GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(lat, lang), 100); 
     geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() { 
      @Override 
      public void onKeyEntered(String key, GeoLocation location) { 
       Toast.makeText(UserProfile.this, "Successfully Found", Toast.LENGTH_SHORT).show(); 
       runnersNearby.add(key); 
       Log.d("Number of users", String.valueOf(runnersNearby.size())); 
       Toast.makeText(UserProfile.this, String.valueOf(runnersNearby.size()), Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onKeyExited(String key) { 
       Toast.makeText(UserProfile.this, "left the place", Toast.LENGTH_SHORT).show(); 
       runnersNearby.remove(key); 
      } 

      @Override 
      public void onKeyMoved(String key, GeoLocation location) { 
       Toast.makeText(UserProfile.this, "key moved but here", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onGeoQueryReady() { 
       System.out.println("All initial data has been loaded and events have been fired!"); 
      } 

      @Override 
      public void onGeoQueryError(DatabaseError error) { 
       Toast.makeText(UserProfile.this, "Error Occured", Toast.LENGTH_SHORT).show(); 
      } 
+0

您正在將GeoFire引用到數據庫的根目錄,這是一個問題。你可以發佈你的geofire代碼嗎? – Wilik

+0

@Wilik我做了一些修復,希望現在我的問題更容易理解.... – secret

回答

1

的問題是,你引用geofire根節點。您應該將其引用到geofire的特殊節點。

你的數據庫結構應該是什麼樣子

"User": { 
    "uid1": { 
     "Availability": true, 
    }, 
    "uid2": { 
     "Availability": true, 
    } 
}, 
"User_Location": { 
    "uid1": { 
     .. some geofire data .. 
    }, 
    "uid2": { 
     .. some geofire data .. 
    } 
} 

如何將geofire引用到另一個位置

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("User_Location"); 
GeoFire geoFire = new GeoFire(ref); 

然後設置位置和往常一樣

geoFire.setLocation(userId, new GeoLocation(userLatitude, userLongitude)); 

之後, Geofire查詢應該可以正常工作。