我试图返回一个布尔值,但返回的值始终为 false,即本例中的 0。
检查变量是一个实例变量,按下按钮时将调用以下函数。
private boolean checkAnswerSubmission() {
DatabaseReference answerDatabase = FirebaseDatabase.getInstance().getReference().child("userPuzzleHistory").child(uid);
answerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(String.valueOf(imagename))) {
check = 1;
} else {
check = 0;
}
//here the value check is working fine but the value cannot be returned from here.
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//here the value returned is always 0
if (check == 1)
return true;
else
return false;
}
与所有异步操作一样,我经常以回调方式进行。
您的解决方案可以这样工作:
-
创建一个简单的回调接口(我的库中有一个回调接口,我几乎在每个应用程序中都使用它)
public interface SimpleCallback {
void callback(Object data);
}
// You could do it as well generic, that's what I do in my lib:
public interface SimpleCallback<T> {
void callback(T data);
}
然后重新设计方法的签名,如下所示:
private void checkAnswerSubmission(@NonNull SimpleCallback<boolean> finishedCallback) {
DatabaseReference answerDatabase = FirebaseDatabase.getInstance().getReference().child("userPuzzleHistory").child(uid);
answerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This will simple call your callback containing a boolean true/false
finishedCallback.callback(dataSnapshot.hasChild(String.valueOf(imagename)));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
你可以这样称呼它:
checkAnswerSubmission(new SimpleCallback<boolean>() {
@Override
void callback(boolean data) {
if (data) {
// true was returned
} else {
// false was returned
}
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)