繁体   English   中英

Android-如何在用户级别处理Firestore异常?

[英]Android - How to handle Firestore exceptions at user level?

我在我的应用程序中使用Firestore,但我不知道如何在用户级别处理由此引发的异常。 (我的意思是发生此类异常时向用户显示的内容)。

例如,要在Firestore上执行任何CRUD操作( DocumentReference#getDocumentReference#setDocumentReference#update ),都会返回一个Task ,其中可能包含异常,但是在文档中我找不到为什么可能由公司的FireStore。

我们可以做些更好的事情,而不是简单地记录异常并显示一条通用消息,例如“发生错误,请稍后再试”?

您可以使用Firestore的onFailureListener()方法在获取,设置或更新数据时获取错误。 在此示例中,我将其用于设置数据:-

firestore.collection("User").document(uid).set(user).addOnSuccessListener(this, new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid)
        {
          //Data Saved Successfully
        }
    })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(Exception e)
                {
                    //Toast error using method -> e.getMessage()

                }
            });

如果要在Firebase身份验证模块中捕获异常,请参阅:- 如何捕获Firebase Auth特定异常

就像在有关获取数据的官方文档中一样,您可以从task对象中获取异常,如下所示:

docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Log.d(TAG, "DocumentSnapshot data: " + document.getData());
            } else {
                Log.d(TAG, "No such document");
            }
        } else {
            //Log the error if the task is not successful
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
});

请记住,一个任务是complete时由工作代表的工作结束后,不管其successfailure 可能有也可能没有错误,您必须检查一下。 在另一方面,按预期完成任务所代表的工作且没有错误,则任务“成功”。

正如@Raj在其答案中提到的那样,您也可以使用addOnFailureListener但请注意,如果网络连接丢失(用户设备上没有网络连接),则不会触发onSuccess()onFailure() 这种行为是有道理的,因为只有在Firebase服务器上已提交(或拒绝)数据后,才认为任务已完成。 仅在Task完成时才调用onComplete(Task<T> task)方法。 因此,如果没有互联网连接,则不会触发onComplete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM