Я хочу скрыть индикатор выполнения, если данная ссылка на 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");
}
});




Вы не можете закрыть индикатор выполнения с помощью 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, этого не происходит.
Я не уверен, что вы там говорите. Описанный выше подход работает и используется многими известными мне приложениями: использование ChildEventListener для детальных обновлений и ValueEventListener для скрытия индикатора выполнения. Мой ответ показывает, как мало лишнего кода, и объясняет, почему это не вызывает (значительного) дополнительного потребления полосы пропускания.
Пожалуйста, добавьте структуру вашей базы данных.