如何使用geofire查询检查10公里半径内是不是存在firebase用户
Posted
技术标签:
【中文标题】如何使用geofire查询检查10公里半径内是不是存在firebase用户【英文标题】:how to check whether firebase user is present in 10km radius with geofire query如何使用geofire查询检查10公里半径内是否存在firebase用户 【发布时间】:2020-05-03 17:32:49 【问题描述】:我想通过 Geofire 查询检查 firebase 用户是否存在于 10 公里半径内。如果用户预设在该半径范围内,则显示他的帖子(将数据添加到 Recyclerview)。
实际上我正在使用此代码,此代码工作正常,但它根据距离重新排列 Recyclerview 项目的位置,我不想更改回收站项目的位置。我正在检查多个用户位置。
public void GetUserIDDetails()
ref.child("Post").child("Postdetails").addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
if (dataSnapshot.exists())
for (DataSnapshot snapshot : dataSnapshot.getChildren())
ShopCategoryModel model = snapshot.getValue(ShopCategoryModel.class);
String UserID= model.getUserID();
String itemID = model.getItemID();
String expiredate = model.getExpiredate();
GetADNeatrby(UserID, itemID,10);
@Override
public void onCancelled(DatabaseError databaseError)
);
public void GetADNeatrby(final String UserID, final String ItemID, int Radius)
GeoFire geoFire = new GeoFire(ref.child("buisinessID"));
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), Raius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener()
@Override
public void onKeyEntered(String key, GeoLocation location)
if (key.equals(UserID))
getADdetails(UserID, ItemID);
@Override
public void onKeyExited(String key)
@Override
public void onKeyMoved(String key, GeoLocation location)
@Override
public void onGeoQueryReady()
@Override
public void onGeoQueryError(DatabaseError error)
);
public void getADdetails(final String UserID, final String ItemID)
userDataset.clear();
ref.child("business").child(UserID).child("ADbanner").child(ItemID).addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
if (dataSnapshot.exists())
ShopCategoryModel model = dataSnapshot.getValue(ShopCategoryModel.class);
userDataset.add(model);
NYOfferDataAdapter adapter = new NYOfferDataAdapter(NearBy_OfferSoffer.this.getContext(), userDataset);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
@Override
public void onCancelled(DatabaseError databaseError)
);
此代码可以正常工作,但有一个问题是它会根据距离重新排列数据。但我想显示数据,因为它是根据 Firebase 数据库的时间存储的数据。请帮我解决这个问题。
【问题讨论】:
【参考方案1】:首先您可以使用 geoQuery 收集附近所有用户的密钥。
List<String> listNearBy=new ArrayList();
public void GetADNeatrby(final String UserID, final String ItemID, int Radius)
GeoFire geoFire = new GeoFire(ref.child("buisinessID"));
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), Raius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener()
@Override
public void onKeyEntered(String key, GeoLocation location)
listNearBy.add(key);
@Override
public void onKeyExited(String key)
@Override
public void onKeyMoved(String key, GeoLocation location)
@Override
public void onGeoQueryReady()
GetUserIDDetails();
@Override
public void onGeoQueryError(DatabaseError error)
);
并且在 GetUserIDDetails() 方法中仅使用其用户 ID 在收集的密钥列表 listNearBy 中的数据。
希望这会有所帮助!
【讨论】:
嘿,Nehal,谢谢,它对我有用......我真是个傻瓜,我没想到那个 arrey 名单......非常感谢!!!以上是关于如何使用geofire查询检查10公里半径内是不是存在firebase用户的主要内容,如果未能解决你的问题,请参考以下文章
如何查询postgres数据库以获取某些坐标10公里半径内的所有点
Firebase GeoFire,从我当前位置检索具有特定半径的帖子