首页 > 解决方案 > Firebase 中的控制按钮可见性

问题描述

这是我的代码

@Override
protected void onStart() {
    super.onStart();
    control.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            s2=dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    if (s1==s2){
        button.setVisibility(View.INVISIBLE);
    }
}

}

当试图从 Firebase 控制可见性时,上面的代码不起作用。如果我在不使用 Firebase 的情况下尝试相同的方法,它会起作用。将不胜感激任何建议

标签: androidfirebase

解决方案


实际上 addValueEventListener() 是一个ASYNC调用,因此在s2分配值之前,它会在您的if(s1==s2)语句中进行比较,并且比较时的值s2是默认值或 null。

相反,您可以尝试将按钮隐藏在异步调用本身中

@Override
protected void onStart() {
super.onStart();
control.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        s2=dataSnapshot.getValue(String.class);
        if ( s1.equalsIgnoreCase(s2) )
            button.setVisibility(View.INVISIBLE);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {}
});
//if (s1==s2)  //Remove these lines
    //button.setVisibility(View.INVISIBLE);   
}

推荐阅读