我正在使用Firebase Firestore,我想从数据库中删除数据。正在删除数据,但进度对话框卡住了。我认为我必须使用Worker线程,但我不知道如何使用。

 db = FirebaseFirestore.getInstance();
            db.collection("expenses").document(ids)
                    .delete()
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {

                             Toast.makeText(Expense_Summary.this, "successfully deleted file", Toast.LENGTH_SHORT).show();
                            result = "deleted";
                            hideProgressDialog();
                            finish();

                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w("deleting f", "Error deleting document", e);
                            hideProgressDialog();
                            Toast.makeText(Expense_Summary.this, "Error deleting file", Toast.LENGTH_SHORT).show();
                        }
                    });



  我引用了doc:
  https://firebase.google.com/docs/firestore/manage-data/delete-data

最佳答案

尝试这个:

 final ProgressDialog progressDialog = ProgressDialog.show(Activity_name_here.this,"Please wait","Processing",true);
                            Runnable runnable=new Runnable() {
                                @Override
                                public void run() {
                                    progressDialog.cancel();
                                }
                            };
                            Handler pdCanceller = new Handler();
                            pdCanceller.postDelayed(runnable, 3000);
 db = FirebaseFirestore.getInstance();
        db.collection("expenses").document(ids)
                .delete()
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                         Toast.makeText(Expense_Summary.this, "successfully deleted file", Toast.LENGTH_SHORT).show();
                        result = "deleted";
                       progressDialog.dismiss();
                        finish();

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w("deleting f", "Error deleting document", e);
                        progressDialog.dismiss();
                        Toast.makeText(Expense_Summary.this, "Error deleting file", Toast.LENGTH_SHORT).show();
                    }
                });


使用进度代码上方的代码,将显示带有文本的对话框,请稍候,旁边正在写一个小圆圈。

这:pdCanceller.postDelayed(runnable, 3000);在这里指定时间示例,我使用3000毫秒。然后,如果成功,将关闭进度对话框。如果失败,进度对话框也将被关闭。

09-30 21:19
查看更多