【问题标题】: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 数据库的时间存储的数据。请帮我解决这个问题。

【问题讨论】:

    标签: android firebase firebase-realtime-database geofire


    【解决方案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 名单......非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2013-11-30
    • 2014-09-27
    • 2019-03-27
    • 1970-01-01
    • 2020-07-05
    • 2019-01-04
    相关资源
    最近更新 更多