Как проверить, не содержит ли ссылка на firebase какое-либо значение или она пуста

Я хочу скрыть индикатор выполнения, если данная ссылка на firebase не содержит никаких входных данных. если по данной ссылке нет данных, то индикатор выполнения продолжает загружаться, как это исправить.

Я хочу отключить индикатор выполнения, если deliveryBoyReference.addChildEventListener(new ChildEventListener() .. функция не вызывается

recyclerView = output.findViewById (R.id.list_of_all_delivery_area_recyclerview); deliveryBoyItems = новый ArrayList<>();

    final ProgressDialog pd = new ProgressDialog(getContext());
    pd.setMessage("loading");
    pd.setCanceledOnTouchOutside(false);
    pd.show();

    firebaseStorage=FirebaseDatabaseReference.getStorageINSTANCE();
    storageReference=firebaseStorage.getReference("DeliveryBoyImage/");


    firebaseDatabase = FirebaseDatabaseReference.getDatabaseInstance();
    deliveryBoyReference = firebaseDatabase.getReference("DELIVERYBOY");

    deliveryBoyReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            DeliveryBoyReference deliveryBoyReference = dataSnapshot.getValue(DeliveryBoyReference.class);
            deliveryBoyItems.add(deliveryBoyReference);
            adapter.notifyDataSetChanged();
            pd.dismiss();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            Log.i("fail","fail");

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

            Log.i("fail","fail");

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i("fail1","fail");
        }
    });

Пожалуйста, добавьте структуру вашей базы данных.

Alex Mamo 31.01.2019 19:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
30
1

Ответы 1

Вы не можете закрыть индикатор выполнения с помощью ChildEventListener, поскольку метод onChildAdded вызывается только тогда, когда дочерний элемент действительно существует. Поэтому, если вы хотите отключить индикатор выполнения, добавьте дополнительный ValueEventListener, который гарантированно сработает:

deliveryBoyReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        pd.dismiss();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.i("fail1","fail");
    }
});

Это не приведет к использованию дополнительной пропускной способности, так как Firebase фактически извлечет данные для обоих слушателей только один раз.

Если я нажму дочерний элемент, то будет вызван полный список дочерних элементов, что приведет к ненужному увеличению количества обращений и снизит эффективность приложения. Но вместо этого, когда я использую ref.addChildEventListener, этого не происходит.

Ankush Singh 01.02.2019 19:05

Я не уверен, что вы там говорите. Описанный выше подход работает и используется многими известными мне приложениями: использование ChildEventListener для детальных обновлений и ValueEventListener для скрытия индикатора выполнения. Мой ответ показывает, как мало лишнего кода, и объясняет, почему это не вызывает (значительного) дополнительного потребления полосы пропускания.

Frank van Puffelen 01.02.2019 19:24

Другие вопросы по теме