【问题标题】:How to create a new DatabaseError instance in Firebase?如何在 Firebase 中创建一个新的 DatabaseError 实例?
【发布时间】:2016-10-24 14:50:44
【问题描述】:

有没有办法生成DatabaseError 对象的新实例?

编辑:

我正在使用一个实现 ValueEventListener 的类,我想在其中捕获异常并通过 onCancelled(DatabaseError databaseError) 方法路由错误。

public class StandardSingleValueListener<T> implements ValueEventListener {

    protected Class<T> mTypeClass;

    public StandardSingleValueListener(Class<T> typeClass){
        mTypeClass = typeClass;
    }
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        T result = null;
        try {
            result = parseMethod(dataSnapshot);
        } catch (Exception e) {
            onCancelled(new DatabaseError(e.toString()); // I'd like to create the error here
            return;
        }
        // process result
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // process databaseError
    }

    protected T parseMethod(DataSnapshot snap){
        return snap.getValue(mTypeClass);
    }
}

其中parseMethod 有时会被覆盖,而mTypeClassT 的类。

【问题讨论】:

  • 您的代码永远不需要创建 DatabaseError。这听起来像XY problem。如果您描述您要完成的工作,为我们提供一些关于用例的上下文(最好是MCVE),这可能会更容易提供帮助。
  • @FrankvanPuffelen 我添加了一个用例

标签: android error-handling firebase firebase-realtime-database


【解决方案1】:

您可以使用以下命令创建DatabaseError from the exception

DatabaseError.fromException(e);

但我不确定这是否是个好主意。您发出的错误信号是应用程序级错误。将其提升为DatabaseError 势必会让那些在您之后维护代码的人感到困惑。

【讨论】:

  • 因此你会建议在这种情况下创建我自己的错误类型,比如 ParseError 吗?或者将 DatabaseError 包装在我自己的错误类型中?
  • 我只是想知道为什么你捕获了parseMethod() 可能引发的异常,然后为相同的错误条件引发另一个异常。为什么不简单地让它不加修改地通过?
  • 我正在处理 onCanceled() 回调后代码中与数据库相关的错误。由于 parseMethod() 用于优化从 Firebase 中检索数据(例如,排序、过滤),因此将其错误处理为类似于 Firebase 的 DatabaseError 是有意义的。我不确定我是否要包装,然后像您建议的那样引发另一个异常。在捕获 parseMethod() 之后,我正在创建一个不可抛出的错误对象,以便我可以检查它并在 onCancelled() 中处理它。同样,我会检查并处理传递给 onCancelled() 的 Firebase 错误
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 2013-12-26
  • 2023-02-11
  • 2013-10-20
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多