首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >火基onDataChange未调用

火基onDataChange未调用
EN

Stack Overflow用户
提问于 2016-02-26 01:13:37
回答 1查看 5.5K关注 0票数 5

我正在为我的Android应用程序使用Firebase。我已经成功地在代码中的多个地方检索到信息,使用如下所示:

代码语言:javascript
运行
复制
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会话是否与此相冲突?我看到了可以通过以下方式解决的问题:

代码语言:javascript
运行
复制
Firebase.goOnline();
Firebase.goOffline();

虽然我不太清楚他们到底在做什么。也许是因为我无法访问由push()添加的带有id的孩子?

更新:

我在objectRef成功地编写了数据库,但是onDataChange()仍然没有被调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-26 16:50:54

好吧,我找到问题的原因了。我有一个空循环,因为我需要继续这些信息,而且它在某种程度上阻止了数据库中的事件。我在onCreate()里有过这样的事情

代码语言:javascript
运行
复制
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()中有一个循环

代码语言:javascript
运行
复制
while(object == null);

我为纠正这一问题所做的工作是将循环替换为:

代码语言:javascript
运行
复制
if(object == null){
    // Do stuff
}

我在onDataChange()中添加了一个对onDataChange()的调用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35641601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档