这是我的代码
@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的情况下尝试相同的方法,它可以工作。 不胜感激任何建议
实际上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);
}
你应该称这行为:
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) {}
});
}
因为addValueEventListener
是异步的,所以onDataChange
完成后onStart
会被调用