Android 控制按钮在Firebase中的可见性

Android 控制按钮在Firebase中的可见性,android,firebase,Android,Firebase,这是我的密码 @Override protected void onStart() { super.onStart(); control.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { s2=dataSnapshot.getValu

这是我的密码

@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的情况下尝试相同的方法,它会起作用。
如果您有任何建议,请拨打以下电话:

if (s1==s2) button.setVisibility(View.INVISIBLE);
在您的
onDataChange
中:

@Override
protected void onStart() {
    super.onStart();
    control.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            GenericTypeIndicator<String> s = new GenericTypeIndicator<String>() {};
            s2=dataSnapshot.getValue(s);
            if (s1==s2) //you can change this line with "if (s1.equals(s2))"
                button.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });
}
@覆盖
受保护的void onStart(){
super.onStart();
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
GenericTypeIndicator s=新的GenericTypeIndicator(){};
s2=dataSnapshot.getValue(s);
if(s1==s2)//您可以用“if(s1.equals(s2))”来更改此行
按钮。设置可见性(视图。不可见);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});
}

因为
addValueEventListener
是异步的,所以在
onStart
完成后将调用
onDataChange
,实际上addValueEventListener()是一个
ASYNC
调用,所以在分配
s2
的值之前,将在
if(s1==s2)中对其进行比较
statement&比较时,
s2
的值为默认值或空值

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

@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);   
}

我认为一些与你问题中的代码相对应的外部信息或简单演示可以帮助其他人更好地了解你的情况。此外,为什么它被标记为安卓,也不是很容易理解,因为你问题中的描述似乎并不局限于安卓开发。太好了,它为你工作了!如果它对你有帮助,你可以投它一票。