Java 未触发Firebase addValueEventListener

Java 未触发Firebase addValueEventListener,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,上周左右,我在从Firebase数据库检索数据时遇到了麻烦。 我已经在StackOverflow和google上搜索过这个问题的答案,要么我不理解所提供的解决方案,要么他们根本不适合我。在到达valueEventListener之前,所有内容都将被成功调用。我已经记录了所有事情,但它从未触发过。错误处理程序不返回任何错误 public class DBHandler { private FirebaseAuth mAuth = FirebaseAuth.getInstance();

上周左右,我在从Firebase数据库检索数据时遇到了麻烦。 我已经在StackOverflow和google上搜索过这个问题的答案,要么我不理解所提供的解决方案,要么他们根本不适合我。在到达valueEventListener之前,所有内容都将被成功调用。我已经记录了所有事情,但它从未触发过。错误处理程序不返回任何错误

public class DBHandler {
    private FirebaseAuth mAuth = FirebaseAuth.getInstance();

    private String key;

    public ArrayList<String>tips,tables,times;

    private DatabaseReference mDatabase;

    private DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
    private DatabaseReference mPostRef = mRootRef.child("user-posts");
    private DatabaseReference mIdRef = mPostRef.child(mAuth.getCurrentUser().getUid());
    private DatabaseReference mKeyRef;//move down
    private DatabaseReference mTimeRef;
    private DatabaseReference mTipRef;
    private DatabaseReference mTableRef;

    public DBHandler(){
        //Constructor
    }

    public DBHandler(String key) {
        tips(key);
        Log.d("Test for tips()", "Triggered");
    }

    public void tips(String key){
        mKeyRef = mIdRef.child(key);
        mTipRef = mKeyRef.child("tips");

        Log.d("Test for reference", "mTipRef: " + mTipRef.getRef());

        mTipRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.d("Test for listener", "Triggered");

                ArrayList<String> placeholder= new ArrayList<String>();
                placeholder = dataSnapshot.getValue(ArrayList.class);
                Log.d("Test for placeholder", "placeholder: " + placeholder);

                tipsHolder(placeholder);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) { }
        });

    }

    private void tipsHolder(ArrayList<String> placeholder) {
        this.tips = placeholder;
    }

    public void times(String key){ }
    public void tables(String key){ }
    public void tablesHolder(ArrayList<String> placeholder){ }
    public void timesHolder(ArrayList<String> placeholder){ }
}
公共类DBHandler{
私有FirebaseAuth mAuth=FirebaseAuth.getInstance();
私钥;
公共阵列列表提示、表格、时间;
私有数据库参考数据库;
private DatabaseReference mRootRef=FirebaseDatabase.getInstance().getReference();
私有数据库引用mPostRef=mRootRef.child(“用户帖子”);
私有数据库引用mIdRef=mPostRef.child(mAuth.getCurrentUser().getUid());
私有数据库引用mKeyRef;//下移
私有数据库引用mTimeRef;
私有数据库引用mTipRef;
私有数据库引用mTableRef;
公共DBHandler(){
//建造师
}
公共数据库处理程序(字符串键){
提示(关键);
Log.d(“测试提示()”,“已触发”);
}
公共作废提示(字符串键){
mKeyRef=mIdRef.child(键);
mTipRef=mKeyRef.child(“提示”);
Log.d(“参考测试”,“mTipRef:+mTipRef.getRef());
mTipRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Log.d(“侦听器测试”、“已触发”);
ArrayList占位符=新的ArrayList();
占位符=dataSnapshot.getValue(ArrayList.class);
Log.d(“占位符测试”,“占位符:+占位符”);
酒保(占位符);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
});
}
私人无效酒保(ArrayList占位符){
this.tips=占位符;
}
公共无效时间(字符串键){}
公共空表(字符串键){}
公共空表持有者(ArrayList占位符){}
public void timeholder(ArrayList占位符){}
}

提前感谢所有试图帮助我解决这一难题的人。

我复制了您的代码并运行了它。当存在网络连接时,侦听器为我触发。我可以在没有连接的情况下让它不着火。你确定你有网络连接吗?您可以按照中的说明监视连接状态。@qbix谢谢您的回复。我尝试在您链接的dev文档中使用连接测试,但得到的行为与我原来的侦听器相同,只是没有调用侦听器。然而,它对你有效的事实让你对一种可能性有了一些洞察力。现在,我正在创建Dbhandler作为一个对象,然后尝试从该对象中提取信息。也许我应该尝试另一种方法?我从未见过听众在课堂上像你这样使用。也许是非传统的,但应该有效。在我的测试中,我只是创建了
DBHandler
的一个实例。不要将连接侦听器放在
DBHandler
中。将它放在主要活动的
onCreate()
中。您还可以尝试启用调试日志记录:
FirebaseDatabase.getInstance().setLogLevel(Logger.Level.debug)
。我已将连接侦听器移动到主活动,并按照您的建议将其放入onCreate,连接成功。因此,似乎出于某种原因,当它在DBHandler中时,它没有足够的时间响应。我只是注意到侦听器的
onCancelled()
方法中没有调试日志语句。放点东西进去。我敢打赌它是在报告一些错误,可能是访问失败。您是否为数据库设置了安全规则?