我有一个布尔设置,以检查应用程序中的重复用户名。我希望boolean根据ValueEventListener中onDataChange的结果返回数据。以下是我所拥有的:
private boolean isUsernameValid(final String username) {
mReference = FirebaseDatabase.getInstance().getReference();
Query query = mReference.child("users").child(username);
ValueEventListener mListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//create condition that would make isUsernameValid return false
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
mReference.addListenerForSingleValueEvent(mListener);
return //if that condition is not met;
}
如果您尝试这样做,您将始终返回false,因为Firebase是异步的,您将需要根据您的连接等待一点,以便返回datasnapshot()
中的任何值
private boolean isUsernameValid(final String username) {
boolean isUsernameValid;
mReference = FirebaseDatabase.getInstance().getReference();
Query query = mReference.child("users").child(username);
ValueEventListener mListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//create condition that would make isUsernameValid return false
isUsernameValid = true;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
mReference.addListenerForSingleValueEvent(mListener);
return isUsernameValid //if that condition is not met;
}
要解决这个问题,您可以创建一个接口,当我们知道有来自ondatachange()
的结果时,该接口将立即激发,然后您可以从那里返回任何内容
首先创建一个接口
public interface FirebaseSuccessListener {
void onDataFound(boolean isDataFetched);
}
private void isUsernameValid(final String username, FirebaseSuccessListener dataFetched) {
mReference = FirebaseDatabase.getInstance().getReference();
Query query = mReference.child("users").child(username);
ValueEventListener mListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//here we are telling to our interface that the data has been found and then we can do anything with it outside this method
dataFetched.onDataFound(true);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
mReference.addListenerForSingleValueEvent(mListener);
}
isUsernameValid.(new FirebaseSuccessListener() {
@Override
public void onCallback(boolean isDataFetched) {
if(isDataFetched){
//you know the value is true, here you can update or request any change for example you can do this
userIsOnFirebase(true);
}else{
userIsOnFirebase(false);
}
}
});
private boolean userIsOnFirebase(boolean isOnFirebase){
return isOnFirebase;
}
很新的反应。。。 我试图循环我的this.props.children,以便向他们传递一个在我的父项中定义的字符串。。。在没有在render方法中定义这些子对象的情况下,这是可能的吗? OwnRenderer应该将道具字符串传递给它的所有子级。。。OwnRenderer不知道要渲染哪个孩子,因此无法通过“”直接传递道具。。。 我试着绕过孩子们直接传递那根绳子,但不幸的是,这不起作用。 不知怎的,它
在下面的代码中,我希望将'races.class'作为参数传递给方法'get allraces()'。我该怎么做?
在控制器中(也可能是Main或另一个文件,我不确定这一切是如何工作的),我们有以下内容: 在Scene Bilder生成的FXML中,如下所示:
我有一堆像这样的路由: 我正在使用通过对象访问路由信息。我想随时知道我在哪个“区域”。目前,我可以通过查看路由是否以某个值开始(例如“/users”)来实现这一点,但这似乎有点骇人听闻。当我定义每条路线时,我希望能够传递额外的信息——在本例中是区域信息?或者也许有更好的方法?
当我点击它时,它会显示模态弹出 我想做的是以某种方式获取内容,显示使用用户编辑。我知道我可以在href上使用javascript设置一些变量,但我想知道是否有更好的方法。
非常感谢你的帮助。