私はFirebaseを初めて使い、すべてのタスクが非同期的に呼び出されるという事実に多くの問題があります。Firebase - Android - fetchProvidersForEmail - なぜすべてのコールが非同期ですか?
たとえば、私はfetchProvidersForEmailを使用して、ユーザにサインアップまたはログインを指示する必要があるかどうかを確認しようとしています。しかし、タスクが終了するまでには、それは遅すぎます。
明らかかどうかはわかりませんが、私の現在のコード(動作しています)は以下のとおりです。私はそれをどのようにすることができますか?
public static void printProviders(String email) {
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() {
@Override
public void onComplete(@NonNull Task<ProviderQueryResult> task) {
Log.d(TAG, "We have " + task.getResult().getProviders().size() + " results.");
for (int i = 0; i < task.getResult().getProviders().size(); i++) {
Log.d(TAG, "Provider " + (i+1) + ": " + task.getResult().getProviders().get(i));
}
}
}
);
}
ここで私は(もちろん、これは動作しません)を作成したいと思う方法の擬似コードがある...
public static boolean emailIsRegistered(String email) {
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() {
@Override
public void onComplete(@NonNull Task<ProviderQueryResult> task) {
if (task.getResult().getProviders().size() > 0) {
return true;
}
return false;
}
});
}
しかし、これは動作しませんので、リターン文はonComplete()のために無効であり、タスクは非同期に実行されるため...
これは初めてのことです。私はStackOverflowを通して検索しようとしましたが、私を助けたものは何も見つかりませんでした。うまくいけば誰かが助けることができる。
ありがとうございました!