来自 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的情况下尝试相同的方法,它可以工作。 不胜感激任何建议

实际上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会被调用

相关内容

  • 没有找到相关文章