【问题标题】:Firebase error message if directory doesn't exist如果目录不存在,则 Firebase 错误消息
【发布时间】:2018-07-26 11:52:58
【问题描述】:

如果 firebase 数据库不存在,我想用 toast 显示错误消息。

示例:当我删除数据库、删除 firebase 项目或没有数据库时,应用程序将无法连接到 firebase 数据库。

因此,当这一切发生时,应用程序应显示错误消息“数据库不存在”或“未连接到数据库”。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    因为您在问题中没有提到您是在寻找 Firebase 实时数据库还是 Cloud Firestore,所以我将为您提供两者的答案。因此,对于 Firebase 实时数据库,/.info/connected 有一个特殊位置,每次 Firebase 实时数据库客户端的连接状态更改时都会更新该位置。以下是官方文档中的示例:

    DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
        connectedRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                boolean connected = snapshot.getValue(Boolean.class);
                if (connected) {
                    System.out.println("connected");
                } else {
                    System.out.println("not connected");
                }
            }
    
            @Override
            public void onCancelled(DatabaseError error) {
                System.err.println("Listener was cancelled");
            }
    });
    

    这样您就可以知道客户端是否连接到服务器。

    对于 Cloud Firestore,当您处于离线状态并使用 get() 调用时,结果将来自您的应用正在使用的 Cloud Firestore 数据的缓存副本。

    要检查数据是来自缓存还是来自 Firestore 服务器,您可以使用以下代码行:

    String source = querySnapshot.getMetadata().isFromCache() ? "Local Cache" : "Firebase Server";
    

    【讨论】:

    • 嗨,亚历克斯,这段代码对我很有用,完全符合我的要求。谢谢。
    • 很好的分享@AlexMamo :)
    • @GastónSaillén 谢谢加斯顿!有你在这儿真好;)
    【解决方案2】:

    引用数据库的主节点并使用 exists() 检查该引用是否存在

    DatabaseReference mDatabase;
    
    mDatabase = FirebaseDatabase.getInstance().getReference();
    
    mDatabase.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists())
            Log.e("No database","Connection Lost");
      }
    
      @Override
      public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + databaseError.getCode());
      }
    });
    

    如果不存在,则不会在该数据库中检查任何内容

    【讨论】:

    • 您好,此代码适用于检查数据库,但如果我从 firebase 中删除我的项目,则无法正常工作。
    • 如果您从数据库中删除项目,您的 google-services.json 将无法工作,因为它不会收到与该项目的任何类型的连接,如果数据库项目被删除,则无法以编程方式知道,您可以知道所需的数据库中是否没有数据
    • 您好,感谢您的回答。另一个答案效果很好。再次感谢您。
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多