私はバックエンドレスを使用して自分のアプリケーションユーザーのデータを保存しています。バックエンドレスには、あなたの電子メールまたはユーザー名を一意にするオプションしかありません。私は自分のユーザー名フィールドを一意にして、ユーザーがログインに使用するものです。電子メールは再利用できるので、電子メールが存在するかどうかを確認するために登録前にメソッドを作成しています。 Android - タスクが実行されていないときに実行されていません
この
はcreateUser
方法で、これはオフに開始され、それが起動するとすぐに、電子メールの可用性をチェックするためにメソッドを呼び出します:
private boolean isAvailable;
private boolean isEmailAvailable(String email) {
isAvailable = false;
String whereClause = "email = '" + email + "'";
BackendlessDataQuery dataQuery = new BackendlessDataQuery();
dataQuery.setWhereClause(whereClause);
Backendless.Persistence.of(BackendlessUser.class).find(dataQuery, new AsyncCallback<BackendlessCollection<BackendlessUser>>() {
@Override
public void handleResponse(BackendlessCollection<BackendlessUser> userBackendlessCollection) {
isAvailable = userBackendlessCollection.getData().isEmpty();
}
@Override
public void handleFault(BackendlessFault backendlessFault) {
Toast.makeText(CreateAccountActivity.this, backendlessFault.getMessage(), Toast.LENGTH_SHORT).show();
}
});
return isAvailable;
}
:これは、電子メールの利用可能性をチェックする方法である
private void createUser() {
showProgressDialog();
if (isEmailAvailable(inputEmail.getText().toString().trim())) {
BackendlessUser user = new BackendlessUser();
user.setProperty(BackendSettings.USERNAME_KEY, inputUsername.getText().toString().trim());
user.setEmail(inputEmail.getText().toString().trim());
user.setPassword(inputPassword.getText().toString());
Backendless.UserService.register(user, new AsyncCallback<BackendlessUser>() {
@Override
public void handleResponse(BackendlessUser backendlessUser) {
hideProgressDialog();
Toast.makeText(CreateAccountActivity.this, BackendSettings.REGISTER_SUCCESS_MESSAGE, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(CreateAccountActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void handleFault(BackendlessFault backendlessFault) {
hideProgressDialog();
String errorCode = backendlessFault.getCode();
String errorMessage;
switch (errorCode) {
case "3040":
errorMessage = BackendSettings.ERROR_3040;
break;
case "3033":
errorMessage = BackendSettings.ERROR_3033;
break;
default:
errorMessage = "An unknown error occurred. Try again.";
}
Toast.makeText(CreateAccountActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
}
});
} else {
hideProgressDialog();
Toast.makeText(CreateAccountActivity.this, BackendSettings.ERROR_EMAIL_TAKEN, Toast.LENGTH_SHORT).show();
}
}
さて、電子メールがすでに送信されているというメッセージが表示されることがあります。だから私はのhandleResponse
メソッドにToast
メッセージを入れることに決めました。私は電子メールが利用可能かどうかを印刷しました。だから私は最初にcreateUser
のelse節からメッセージを受け取りました。電子メールは既に取られていて、その後私はisEmailAvailable
メソッドからメッセージを受け取りました。後でisEmailAvailable
メソッドが実行されているようです。何がうまくいかないのか分かりません。
私はあなたが私のアカウントボタンを作成することを言っている、申し訳ありませんが、私が代わりに '' createUser'のisEmailAvailable'メソッドを呼び出す必要がありますか? –
最初にisEmailAvailableを呼び出す必要があります。そして去る。後で、isEmailAvailableへのコールバックが呼び出されると、あなたはそのことを行うべきです。 – babay
変更されたコードを追加しました。今は非同期です。 – babay