我正在使用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");
}
});
完全相同的代码已在另一个活动中成功使用但由于某种原因,它在特定活动中不起作用(onDataChange永远不会被调用,也不会被onCancelled)。可能是其他活动中的Firebase会话与此相冲突吗?我看到了可以解决的问题:
Firebase.goOnline();
Firebase.goOffline();
虽然我不确定我明白那些确切的做法。也许是因为我以某种方式无法访问push()
添加了他的ID的孩子?
更新
我在objectRef中成功写入了数据库,但仍然没有调用onDataChange()
。
答案 0 :(得分: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");
}
});
我在onResume()
:
while(object == null);
我为解决问题所做的是用以下代码替换循环:
if(object == null){
// Do stuff
}
我在onResume()
onDataChange()
的电话