我正在尝试使用Semaphore来等待我的firebase valueEventListener。我有一个用户信息活动,包含6个不同的字段,用户必须填写。当用户保存他/她的信息时,我想要进行“全部或无”的检查。某些用户信息不能重复...例如用户名、电子邮件和电话号码。我正在使用firebase,当前的一般思路是:
void saveUserInfo(){
if(field1 exist in database){
return;
}
.
.
.
if(field6 exist in database){
return;
}
savefield1();
.
.
.
savefield6();
}
我遇到的问题是在检查数值是否已经存在于数据库中的方法中。这是目前我的方法:
```html
我遇到的问题是在检查数值是否已经存在于数据库中的方法中。这是目前我的方法:
``` public boolean alreadyInUse(String key, String value) throws InterruptedException {
final StringBuilder done = new StringBuilder("");
final Semaphore semaphore = new Semaphore(0);
mDatabase.child(key).child(value).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String result = dataSnapshot.getValue(String.class);
if(result == null){
Log.d("WorkoutLog", "result: null");
done.append("false");
semaphore.release();
return;
}
else if(result.equals(uID)){
Log.d("WorkoutLog", "result: " + result.toString());
done.append("false");
semaphore.release();
return;
}
else{
Log.d("WorkoutLog", "result: " + result.toString());
done.append("true");
semaphore.release();
return;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
semaphore.acquire();
if(done.equals("true")){
return true;
}
else if(done.equals("false")){
return false;
}
else{
Log.d("WorkoutLog", "Shouldn't be here");
return true;
}
}
目前信号量没有被释放...想知道是否有人能在这里帮助我。如果没有使用信号量,在Firebase查询完成之前,返回语句就会触发...