什么可能导致firebase ValueEventListener不调用onDataChange或onCancelled?

时间:2016-06-25 21:03:44

标签: java firebase firebase-realtime-database

请看编辑,即使你不知道firebase这可能是一个正常的java问题 请注意,这适用于firebase API的Java服务器版本。我有一个实现ValueEventListener的类,可以看作如下:

public abstract class BalanceResultListener implements ValueEventListener {
    private final SteamUser user;

    public BalanceResultListener(SteamUser user) {
        this.user = user;
    }

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.d(getClass(),"BalanceResultListener for "+user.getUid()+" got data!");
        onBalanceChange(user, (int) dataSnapshot.child("keys").getValue());
    }

    public abstract void onBalanceChange(SteamUser user, int balance);
}

然后扩展如下:

private class BalanceCheckListener extends BalanceResultListener {
    // Snip, not relevant

    BalanceCheckListener(SteamUser user, int betAmount) {
        super(user);
        Log.d(getClass(),"BalanceCheckListener for "+user.getUid()+" created!");
        // Snip, not relevant
    }

    @Override
    public void onBalanceChange(SteamUser user, int balance) {
        Log.d(getClass(),user.getUid()+" has a balance of "+balance);
        // Snip, not relevant
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(getClass(),user.getUid()+"'s bet failed due to a db error (1)");
        // Snip, not relevant
    }
}

最后,这个监听器被添加如下:

<DatabaseReference>.addListenerForSingleValueEvent(new BalanceCheckListener(user, betAmount));

现在,正在调用BalanceCheckListener构造函数中的调试消息,所以我知道它已经到了那一点;然而,程序等待大约3秒然后终止,好像监听器运行并返回。没有调用onDataChange和onCancelled的调试消息(我已经通过使用普通的System.outs仔细检查它不是Log)没有使用BalanceCheckListener(或者只是ValueEventListener)的onDataChange或onCancelled方法被叫。如果数据库没有遇到错误或给我结果,可能会导致返回什么?

修改 我在监听器添加调用后添加了10秒的睡眠,现在最终onCancel正在运行。我不确定为什么要输出错误需要进行此睡眠(可能在输出错误之前控制台流正在关闭?)

编辑编辑:使所有内容在10秒睡眠后正常工作然后将其删除后,即使没有错误也会发生相同的返回。可能是垃圾收集器正在擦除类,因为它没有引用它? (虽然应该有,因为它需要有一个引用来调用它...)

0 个答案:

没有答案