a2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//below
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
ra2 = dataSnapshot.child("a2").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//fetching face value
ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
rface = dataSnapshot.child("face").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//fetching nothingdb which is equals to "zero" in Firebase by default.
ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
nothing = dataSnapshot.child("nothingdb").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//fetching addeddb which is equals to "one" in Firebase by default.
ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
added = dataSnapshot.child("addeddb").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//starting if condition
if (ra2==nothing){
if (rface==nothing){
a2.setBackgroundResource(R.drawable.rounded);{
Firebase refChild = ref2.child("a2");
refChild.setValue("rounda2");
refChild = ref2.child("face");
refChild.setValue("one");
}
else if (rface==added) {
a2.setBackgroundResource(R.drawable.crossed);
{
Firebase refChild = ref2.child("a2");
refChild.setValue("crossa2");
refChild = ref2.child("face");
refChild.setValue("zero");
}
}
}
});
}
});
我正在尝试使用上面编写的代码,以便一旦我单击按钮,按钮的背景图像就会根据 Firebase 中存在的数据进行更改,但 If 条件由于某种原因不起作用。
它只是忽略 if (ra2==nothing){
以及下一个 if 条件。
最佳答案
监听器onDataChange()
回调是异步的。当您比较 ra2
、nothing
、added
和 rface
的相等性时,它们不会包含有效结果,因为 onDataChange()
方法尚未执行。 This answer相关问题更详细地解释了执行顺序。
此外,要比较字符串是否相等,您不能使用 ==
运算符。您必须使用equals()方法或TextUtils.equals() .
关于java - 为什么在 Android Studio 中使用 Firebase 数据库时 onClick 内的 "If Condition"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522268/