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

我在我的应用程序中使用 Firestore,我无法弄清楚如何在用户级别处理由此引发的异常。(我的意思是在发生此类异常时向用户显示什么)。

例如,要CRUD对 Firestore ( DocumentReference#getDocumentReference#setDocumentReference#update)执行任何操作,Task都会返回一个可能包含异常的操作,但在文档中我找不到Firestore 可能抛出此异常的原因

除了简单地记录异常并显示诸如“发生错误,请稍后再试”之类的通用消息之外,我们是否可以做一些更好的事情?


largeQ
浏览 154回答 2
2回答

陪伴而非守候

在关于获取数据的官方文档中,您可以task像这样从对象中获取异常:docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onComplete(@NonNull Task<DocumentSnapshot> task) {&nbsp; &nbsp; &nbsp; &nbsp; if (task.isSuccessful()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DocumentSnapshot document = task.getResult();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (document.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d(TAG, "DocumentSnapshot data: " + document.getData());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d(TAG, "No such document");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Log the error if the task is not successful&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d(TAG, "get failed with ", task.getException());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }});请记住,任务是指任务所complete代表的工作完成时,无论其success或failure。可能有也可能没有错误,你必须检查一下。另一方面,当任务所代表的工作按预期完成且没有错误时,任务就是“成功的”。正如@Raj 在他的回答中提到的,您也可以使用addOnFailureListener但请注意,如果网络连接丢失(用户设备上没有网络连接),则既onSuccess()不会onFailure()触发,也不会触发。这种行为是有道理的,因为只有在 Firebase 服务器上提交(或拒绝)数据时才认为任务已完成。onComplete(Task<T> task)方法也仅在任务完成时调用。因此,在没有互联网连接的情况下,两者都不会onComplete被触发。

绝地无双

您可以使用 Firestore 的 onFailureListener() 方法并在获取、设置或更新数据时获取错误。在这个例子中,我在设置数据中使用了它:-firestore.collection("User").document(uid).set(user).addOnSuccessListener(this, new OnSuccessListener<Void>() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onSuccess(Void aVoid)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Data Saved Successfully&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .addOnFailureListener(this, new OnFailureListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onFailure(Exception e)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Toast error using method -> e.getMessage()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java