我正在为我的Android应用程序使用Firebase。我已经成功地在代码中的多个地方检索到信息,使用如下所示:
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");
}
});
在另一个活动中成功地使用了完全相同的代码,但由于某种原因,它不能在特定的活动中工作(onDataChange从未被调用,onCancelled也不调用)。其他活动中的Firebase会话是否与此相冲突?我看到了可以通过以下方式解决的问题:
Firebase.goOnline();
Firebase.goOffline();
虽然我不太清楚他们到底在做什么。也许是因为我无法访问由push()
添加的带有id的孩子?
更新:
我在objectRef成功地编写了数据库,但是onDataChange()
仍然没有被调用。
发布于 2016-02-26 16:50:54
好吧,我找到问题的原因了。我有一个空循环,因为我需要继续这些信息,而且它在某种程度上阻止了数据库中的事件。我在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");
}
});
我在onResume()
中有一个循环
while(object == null);
我为纠正这一问题所做的工作是将循环替换为:
if(object == null){
// Do stuff
}
我在onDataChange()
中添加了一个对onDataChange()
的调用
https://stackoverflow.com/questions/35641601
复制相似问题