从 firebase 数据库获取数据时显示进度对话框

Posted

技术标签:

【中文标题】从 firebase 数据库获取数据时显示进度对话框【英文标题】:Showing progress dialog while getting data from firebase database 【发布时间】:2017-05-01 02:36:06 【问题描述】:

我是 firebase 新手,我想在从 firebase 获取数据时显示进度对话框。我已经实现了这一点,但问题是当获取时发生一些网络错误时我无法关闭对话框。我知道当从firebase加载数据时调用OnDataChange方法而没有错误但是如果发生一些错误怎么办。那么调用哪个方法呢?

 View view = inflater.inflate(R.layout.fragment_stories, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    showProgressDialog("Please Wait...");
    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = firebaseDatabase.getReference("content");
    databaseReference.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            Log.d(TAG,"On Data Change");
            if(mProgressDialog != null)
                mProgressDialog.dismissWithAnimation();
            
        

        @Override
        public void onCancelled(DatabaseError databaseError) 
            Log.d(TAG,"On Cancelled");

            if(mProgressDialog != null)
                mProgressDialog.dismissWithAnimation();
            
        
    );

【问题讨论】:

不是出现网络错误,甚至连valueEventListener的onCancelled()都没有被调用。我尝试使用扩展 AsyncTask 的类对象在其 doInBackground() 中显示进度对话框,但即使我更改了数据库引用,它也只能帮助我检索一次数据。如果我不使用此类的对象,我不知道如何显示进度对话框,直到从数据库中检索到我的数据,但它工作正常。阻碍我的问题是如何在不使用 AsyncTask. 的情况下显示从 firebase 数据库中检索数据的进度对话框 【参考方案1】:
private ProgressDialog mProgressDialog = new ProgressDialog(this);

mProgressDialog.setMessage("Work ...");
mProgressDialog.show();

FirebaseDatabase.getInstance().getReference()
                                    .child("child node")
                                    .addListenerForSingleValueEvent(new ValueEventListener() 
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot) 

                                            if (dataSnapshot.exists())

                                               do something
                                               mProgressDialog.dismiss();
                                             else 

                                               mProgressDialog.dismiss();
                                               Snackbar.make(v, "datasnapshot is null", Snackbar.LENGTH_LONG).setAction("Action", null).show();

                                            
                                        

                                        @Override
                                        public void onCancelled(DatabaseError databaseError) 

                                           mProgressDialog.dismiss();
                                        
                                    );

【讨论】:

onCancelled 未在网络错误时调用...试过但不起作用 我已经用我的代码编辑了这个问题。请看一下。谢谢

以上是关于从 firebase 数据库获取数据时显示进度对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何在显示firebase数据获取的进度条时通过startListening()解决错误? [重复]

运行代码时显示进度对话框的问题

Android - 在 AsyncTask 执行时显示进度对话框

如何在用户离线时尝试将数据添加/上传到 Firebase 时显示错误?

Android - 仅在 AsyncTask 未完成时单击按钮时显示进度对话框

从互联网加载数据时的进度对话框[重复]