私はユーザーを保存するデータベースを持っており、新しいものを追加する前にユーザーが存在するかどうかをチェックして上書きしません。新しい値を追加する前に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();
}
問題は、それが読み取りのために待機していないということで、先に行くと、新しいレコードを作成します(I pushを使用すると、新しいプッシュIDの下に同じレコードが作成されます)。私はfirebaseがトランザクションハンドラと呼ばれるものを持っているのを見ました。私はそれを使う必要があると思いますが、ドキュメンテーションは私を助けませんでした。私はここで同じ質問をしている人を見ましたが、あなたがそれを行う方法を説明し、他の質問に私をリダイレクトしないと、私は感謝したいと思います。
そのコールバックは何ですか?私は、通常のasyncTasksがonPostExecuteであることを知っています。それはここで同じですか?どこに追加しますか? –
私の投稿を編集して簡単な例を追加しました – BenjaminBihr
このメソッドを試しましたが、.exist()および.notExist()は静的メソッドではなく、静的コンテンツから参照することはできません。 exist()とnotExist()を静的にすると、 'この言語レベルでは拡張メソッドはサポートされていません'と表示されます。ヘルプ –