没有调用Firebase onDataChange

Sun*_*tor 5 android firebase

我正在使用Firebase为我的Android应用程序.我已经在我的代码中的多个位置成功检索了信息,例如:

dbRef = new Firebase(Constants.URL_DB);
childRef = dbRef.child(Constants.KEY_CHILD);
objectRef = childRef.child(objectId); 

// Log the URL to the object.
// This has been verified. The path is good.
Log.d("DEBUG", "To String: " + objectRef.toString()); 

childRef.addValueEventListener(new ValueEventListener()
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        Log.d("DEBUG", "Success");
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        Log.e("DEBUG", "Failure");
    }
});
Run Code Online (Sandbox Code Playgroud)

完全相同的代码已在另一个活动中成功使用但由于某种原因,它在特定活动中不起作用(onDataChange永远不会被调用,也不会被onCancelled).可能是其他活动中的Firebase会话与此相冲突吗?我见过可以解决的问题:

Firebase.goOnline();
Firebase.goOffline();
Run Code Online (Sandbox Code Playgroud)

虽然我不确定我明白那些确实做了什么.也许是因为我以某种方式无法访问由push()他的id 添加的孩子?

更新:

我在objectRef中成功写入数据库,但onDataChange()仍未调用.

Sun*_*tor 1

好的,我找到了导致问题的原因。我有一个空循环,因为我需要信息才能继续,并且它以某种方式阻止了数据库中的事件。我有这样的事情onCreate()

childRef.addValueEventListener(new ValueEventListener()
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        Log.d("DEBUG", "Success");
        object = snapshot.getValue(MyObject.class);
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        Log.e("DEBUG", "Failure");
    }
});
Run Code Online (Sandbox Code Playgroud)

我有循环onResume()

while(object == null);
Run Code Online (Sandbox Code Playgroud)

我为解决这个问题所做的是将循环替换为:

if(object == null){
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

我添加了一个onResume()调用onDataChange()

  • 使其成为实例变量“public Object object”,或者使用所需类型的变量创建一个类“final object = new MyObject();” 对象.setValue(值);` (2认同)