如何检查给定的firebase参考不包含任何值或为空

时间:2019-01-31 18:40:03

标签: java android firebase-realtime-database android-progressbar

如果给定的Firebase参考不包含任何输入,我想关闭进度栏。 如果给定的参考没有数据,则进度条将继续加载,如何解决此问题。

如果deliveryBoyReference.addChildEventListener(new ChildEventListener()..我想关闭进度栏。 函数未调用

recyclerView = output.findViewById(R.id.list_of_all_delivery_area_recyclerview);         deliveryBoyItems = new 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");
        }
    });

1 个答案:

答案 0 :(得分:0)

您无法使用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实际上将在幕后只为两个侦听器检索一次数据。