You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Firebase Firestore错误异常识别及枚举存储实现求助

解决方案:封装Firebase错误枚举与辅助函数

1. 定义错误枚举类

先创建统一的错误枚举,把业务错误和Firebase请求错误归类管理:

public enum FirebaseError {
    MEMBER_NOT_FOUND,    // 业务:成员不存在
    NETWORK_ERROR,       // 网络异常
    PERMISSION_DENIED,   // 权限不足
    INVALID_DOCUMENT_ID, // 无效文档ID
    UNKNOWN_ERROR        // 未知错误
}

2. 编写错误解析辅助函数

新建工具类FirebaseErrorUtils,实现异常到枚举的转换逻辑:

public class FirebaseErrorUtils {
    public static FirebaseError parseFirebaseException(Exception e) {
        // 处理Firestore专属异常
        if (e instanceof FirebaseFirestoreException) {
            FirebaseFirestoreException firestoreEx = (FirebaseFirestoreException) e;
            switch (firestoreEx.getCode()) {
                case PERMISSION_DENIED:
                    return FirebaseError.PERMISSION_DENIED;
                case NOT_FOUND:
                    return FirebaseError.INVALID_DOCUMENT_ID;
                case UNAVAILABLE:
                    return FirebaseError.NETWORK_ERROR;
                default:
                    return FirebaseError.UNKNOWN_ERROR;
            }
        }
        // 处理网络IO异常
        else if (e instanceof IOException) {
            return FirebaseError.NETWORK_ERROR;
        }
        // 其他未覆盖的异常
        else {
            return FirebaseError.UNKNOWN_ERROR;
        }
    }
}

3. 完善DataListener接口

给你的DataListener新增错误回调方法,用于传递解析后的错误枚举:

public interface DataListener<T> {
    void onDataReady(T data);
    void onDataNotFound(FirebaseError error);
    void onError(FirebaseError error); // 新增错误回调
}

4. 改造原getMember方法

更新原方法,在失败回调里调用辅助函数解析错误,并通知监听者:

public static void getMember(String id, DataListener<Member> listener){
    FirebaseAgent.getMemberDocumentReference(id).get()
        .addOnSuccessListener(documentSnapshot -> {
            if (documentSnapshot.exists()) {
                listener.onDataReady(documentSnapshot.toObject(Member.class));
            } else {
                listener.onDataNotFound(FirebaseError.MEMBER_NOT_FOUND);
            }
        })
        .addOnFailureListener(e -> {
            FirebaseError error = FirebaseErrorUtils.parseFirebaseException(e);
            listener.onError(error);
        });
}

补充说明

  • 你可以根据业务需求扩展FirebaseError枚举,比如添加INVALID_ARGUMENT、ABORTED等Firestore官方错误码对应的枚举项
  • 辅助函数里的异常判断逻辑可以进一步细化,覆盖更多Firebase可能抛出的异常类型
  • 业务错误(如MEMBER_NOT_FOUND)和请求错误分开处理,能让调用方更清晰地区分不同错误场景

内容的提问来源于stack exchange,提问作者Mouad Oumous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:53:30