Firebase处理disconect到数据库 [英] Firebase Handling disconect to database

查看:142
本文介绍了Firebase处理disconect到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不确定它是disconect或DatabaseErrors事件。首先,我在开始在Firebase上加载数据时有一个对话框显示,然后我想在两种情况下关闭对话框:


  1. 有互联网:加载数据成功,并在onDataChange dissmiss对话框。


  2. 没有互联网连接或应用程序启动时快速关闭WiFi。在第二种情况下,我认为它会调用onCancelled,在这种方法中,我将关闭对话框。但实际上,这不是要求取消。

    那么,如何在第二种情况下解除对话。这里是我的代码



    pre $ private $ getCategory(){
    mDatabase = FirebaseDatabase.getInstance()。getReference();
    mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
    .addListenerForSingleValueEvent(new ValueEventListener(){
    @Override
    public void onDataChange(DataSnapshot dataSnapshot){
    // do something

    //然后关闭对话框
    mDialog.dismiss();

    $ b @Override $ b $ public void onCancelled(DatabaseError databaseError){
    mDialog.dismiss();
    }
    });

    $ / code>


    解决方案

    onCancelled()在服务器拒绝侦听器时调用,通常当用户没有访问数据的权限时。



    如果您没有与Firebase数据库的连接,可能需要阻止附加侦听器。为此,您可以收听。 info / connected ,只有当侦听器是真实的时候才附加监听器。

      mDatabase = 。FirebaseDatabase.getInstance()getReference(); 
    DatabaseReference connectedRef = mDatabase.child(。info / connected);
    connectedRef.addValueEventListener(new ValueEventListener(){
    @Override
    public void onDataChange(DataSnapshot snapshot){
    boolean connected = snapshot.getValue(Boolean.class); $ b $如果(连接){
    mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
    .addListenerForSingleValueEvent(new ValueEventListener(){
    @Override
    public void onDataChange(DataSnapshot dataSnapshot){
    //执行某些操作

    //然后关闭对话框
    mDialog.dismiss();
    }

    @Override
    public void System.err.println(Listener was canceled);
    mDialog.dismiss();
    }
    });
    }其他{
    System.out.println(未连接);
    mDialog.dismiss( );


    $ b @Override
    public void onCancelled(DatabaseError error){
    System.err.println(Listener was canceled);
    }
    });


    I'm not sure it's disconect or DatabaseErrors event. First I have a dialog show when start loading data on Firebase, and then I want to dismiss that dialog in two case :

    1. have internet: load data success, and I dissmiss dialog in onDataChange.

    2. no internet connection or turn off wifi quickly when app start.

    In second case, I think It's will call onCancelled, and in that method, I will dismiss dialog. But in real, it's not call onCancelled.

    So, how I can dissmiss dialog on second case. Here's my code

    private void getCategory() {
        mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        //do something
    
                        //then dismiss dialog
                        mDialog.dismiss();
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        mDialog.dismiss();
                    }
                });
    }
    

    解决方案

    onCancelled() is called when the server rejects the listener, typically when the user doesn't have permission to access the data.

    You'll probably want to prevent attaching the listener if you don't have a connection to the Firebase Database. For that you can listen to .info/connected and only attach the listener when that is true.

    mDatabase = FirebaseDatabase.getInstance().getReference();
    DatabaseReference connectedRef = mDatabase.child(".info/connected");
    connectedRef.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
        boolean connected = snapshot.getValue(Boolean.class);
        if (connected) {
            mDatabase.child(ReferenceToFirebase.CHILD_CATEGORIES)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        //do something
    
                        //then dismiss dialog
                        mDialog.dismiss();
                    }
    
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        System.err.println("Listener was cancelled");
                        mDialog.dismiss();
                    }
            });
        } else {
          System.out.println("not connected");
          mDialog.dismiss();
        }
      }
    
      @Override
      public void onCancelled(DatabaseError error) {
        System.err.println("Listener was cancelled");
      }
    });
    

    这篇关于Firebase处理disconect到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆