我正在使用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()
仍未调用.
好的,我找到了导致问题的原因。我有一个空循环,因为我需要信息才能继续,并且它以某种方式阻止了数据库中的事件。我有这样的事情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()
归档时间: |
|
查看次数: |
3878 次 |
最近记录: |