无法从Firebase实时数据库读取数据。永远不会触发OnDataChange方法

时间:2019-05-20 10:29:59

标签: android firebase firebase-realtime-database

根据google doc的onDataChange方法,该位置的数据快照将被调用。每次数据更改时也会调用它。但就我而言,它从未被调用过。我已经读过documentation关于Firebase实时数据库的信息,甚至看过video就像that。没有任何代码段有效。

我当前的代码状态:

public void init() {
    showLoading();
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("sales");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            doStuff(dataSnapshot);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            showError(databaseError);
        }
    });
}

我在doStuff()showError()上有断点。

Firebase数据库节点: enter image description here

数据库规则:

 {
   "rules": {
   ".read": true,
   ".write": false
   }
 }

我花了两天时间进行研究,但仍然找不到任何有效的方法或对我的问题的解释。

编辑: 我的Fragment的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_sales, container, false);
    ButterKnife.bind(this, view);

    init();

    return view;
}

public void init() {
    showLoading();
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("sales");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            doStuff(dataSnapshot);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            showError(databaseError);
        }
    });
}    

private void showLoading() {
    progressBar.setVisibility(View.VISIBLE);
}

public void hideLoading() {
    progressBar.setVisibility(View.GONE);
}


@Override
public void onDestroy() {
    super.onDestroy();
    hideLoading();
}

我尝试了addListenerForSingleValueEventaddValueEventListener并得到了相同的结果。

我还尝试了数据库Rules的不同组合(true,false,“ auth == null”,“ auth!= null”)。

编辑2:我只是再试一次,就可以了! onDataChange()触发一次。但是,当我用完全相同的代码(再次按下debug按钮)重新启动应用程序时,它再次变得不再触发...

0 个答案:

没有答案