如何使用 geofire 查询检查 10 公里半径内是否存在 firebase 用户
how to check whether firebase user is present in 10km radius with geofire query
我想使用 Geofire 查询来检查 10 公里半径内是否存在 firebase 用户。如果用户预设在该半径内,则显示他的 post(将数据添加到 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 数据库上的时间存储的数据。请帮我解决这个问题。
首先,您可以使用 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 中的数据。
希望对您有所帮助!!
我想使用 Geofire 查询来检查 10 公里半径内是否存在 firebase 用户。如果用户预设在该半径内,则显示他的 post(将数据添加到 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 数据库上的时间存储的数据。请帮我解决这个问题。
首先,您可以使用 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 中的数据。
希望对您有所帮助!!