Как я могу проверить Geofire, чтобы выйти из системы, если Geofire не был создан? - PullRequest
0 голосов
/ 26 марта 2019

Краткое описание проблемы: Я новичок в Android Studio и Firebase с Geofire, будьте осторожны.Моя цель - выйти из системы, когда пользователь находится на экране карты моего приложения без местоположения Geofire.Я не могу понять, как запросить «g» в моем Geofire.Как я могу запросить дочерний элемент "g", чтобы увидеть, был ли он создан или нет?И если «г» не было создано, их нужно выйти из системы.Таким образом, целью является запрос «g» и создание метода, который, если «g» равен нулю, завершает работу пользователя.

Что я сделал: Многие сообщения Stackoverflow не использовали Android Studio.Я нашел это Я добавил местоположение, используя geofire в firebase , но это не решило мою проблему.Я также попытался проверить Google firebase на наличие дочерних элементов

onLocationChanges - это место, где я добавляю онлайн-продавца и где я также хочу проверить, было ли создано "g" или нет.

 @Override
public void onLocationChanged(Location location) {


    // Adds VendorOnline Child to Firebase when Vendor is On This Activity
    addVendorOnline();
    // Log user out if they are on the map screen without a "VendorOnline" Uid
    logVendorOutIfBuggy();

}

Это метод для создания онлайн-продавца и проверки, был ли создан «g»:

 private void addVendorOnline(){

    if (FirebaseAuth.getInstance().getCurrentUser() != null) {

        String vendorId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference vendorIdReference = FirebaseDatabase.getInstance().getReference("VendorOnline");
        GeoFire vendorGeoFire = new GeoFire(vendorIdReference);
        vendorGeoFire.setLocation(vendorId, new GeoLocation(lastLocation.getLatitude(), lastLocation.getLongitude()));
    }
    }  


   // Log user out if for some reason they do not have a "g" child but are on the map screen.
   private void logVendorOutIfBuggy() {
   DatabaseReference ref = FirebaseDatabase.getInstance().getReference("g");

    if(ref == null){

        Toast.makeText(VendorMapsActivity.this, "Error", Toast.LENGTH_LONG).show();

        FirebaseAuth.getInstance().signOut();
    }

Что яожидается, что произойдет, и что на самом деле произойдет: Я ожидаю, что пользователь выйдет из системы, если "g" равно нулю, но сейчас пользователь не выходит из системы.

how to query for g

1 Ответ

1 голос
/ 27 марта 2019

Вот пример вызова getLocation, чтобы узнать, зарегистрировал ли поставщик местоположение.

Из javadocs LocationCallback.onLocationResult:

Этот метод вызывается с текущим местоположениемключ.location будет нулевым, если в GeoFire не сохранено местоположение для ключа.

        final String vendorKey = "someVendorKey";
        geoFire.getLocation(vendorKey, new LocationCallback() {
            @Override
            public void onLocationResult(String key, GeoLocation location) {
                if (key.compareTo(vendorKey) == 0) {
                    if (location == null) {
                        // vendor has not logged a location yet (or it was removed)
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
...