как проверить, присутствует ли пользователь firebase в радиусе 10 км с помощью запроса geofire - PullRequest
0 голосов
/ 16 января 2020

Я хочу проверить, присутствует ли пользователь firebase в радиусе 10 км с помощью запроса Geofire. если пользователь предварительно настроил этот радиус, то покажите свой пост (добавьте данные в 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 Ответ

1 голос
/ 17 января 2020

Сначала вы можете собрать ключ всех соседних пользователей, используя 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 () используйте только те данные, чей userID в собранном списке ключей listNearBy.

Надеюсь, что это поможет !!

...