我有一個數據庫用於存儲用戶,並且我想在添加新用戶之前檢查用戶是否存在,以免覆蓋。Android Studio firebase數據庫在添加新值之前等待讀取
我有一個函數,通過數據庫記錄,並返回一個布爾值,如果它找到或沒有找到用戶。
public boolean checkUserExists(final String emailAddress, final String emailDomain){
DatabaseReference myRef = database.getReference("Users");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot mydata : dataSnapshot.getChildren()){
User user = mydata.getValue(User.class);
if (user.getEmailAddress().equals(emailAddress) &&
user.getEmailDomain().equals(emailDomain)){
userExists = true;
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return userExists;
}
目前我試圖做檢查的方法是這樣的:
if (!(registerRepo.checkUserExists(emailAddress, emailDomain))){
User user = new User(firsName, lastName, emailAddress, emailDomain);
registerRepo.writeUser(user);
} else {
Toast toast = Toast.makeText(getBaseContext(), "User exists", Toast.LENGTH_SHORT);
toast.show();
}
的問題是,它不會等待讀取和前進並創造新的記錄(我使用push,所以它在新的推送ID下創建相同的記錄)。我已經看到firebase有這樣一個叫做事務處理器的東西,我認爲這就是我需要使用的東西,但是文檔沒有幫助我,而且我看過其他人在這裏提出同樣的問題,但是不能所以請找出解決方案,如果你能解釋如何去做,而不是將我重定向到其他問題,我會很感激。
什麼是回調?我知道對於常規的asyncTasks是onPostExecute。這裏是一樣的嗎?我在哪裏添加它? –
我剛剛編輯了我的帖子並添加了一個簡單的示例 – BenjaminBihr
我試過這種方法,它說.exist()和.notExist()是非靜態方法,它們不能從靜態內容中引用。如果我使存在()和notExist()靜態,它表示'在此語言級別不支持擴展方法'。請幫助 –