0

ユーザーがデータを更新できるようにする次のコードがあります。

String username = "Any username that is currently already used by another user";

ParseUser currentUser = ParseUser.getCurrentUser();
if (currentUser != null) {
    currentUser.setUsername(username);

    currentUser.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null) {
                // All good!
            } else {
                // Error: Account already exists for this username.
                Log.e("Error: ", e.getMessage());
            }
        }
    }
});

ユーザーが他の誰かが既に使用しているユーザー名でユーザー名を更新しようとすると、エラーがスローされます。

このユーザー名のアカウントは既に存在します。

これはまさに私が望んでいることですが、ユーザーが戻ると(ユーザー名を利用可能なユーザー名に変更する別のリクエストを行わずに)、ParseUser.get("username")すでに存在するために保存されなかった値が返されます(実際のその時点でサーバーに保存されている値)。

ParseUser currentUser = ParseUser.getCurrentUser();
currentUser.fetchInBackground(new GetCallback<ParseUser>() {
    public void done(ParseUser user, ParseException exception) {
        if (exception == null) {
            // username now returns ("Any username that is currently already used by another user").
            String username = user.get("username").toString().trim();
        } else {
            // Error
        }
    }
});

これまでのところ、問題を解決する唯一の方法は、アプリをアンインストール/再インストールすることです。何が原因ですか?そして、これを修正する良い方法はありますか?

4

1 に答える 1

0

の前に現在のユーザー名をバックアップする必要がありますsetUsername(newName)。例外が発生した場合、次の 2 つのオプションがあります。

  • ParseUser.getCurrentUser().fetch()(オブジェクトを以前の状態に復元するため)によってユーザー オブジェクトを再フェッチします。
  • ユーザー名を以前の値に再設定します(以前にバックアップしたもの)

なぜこれが起こったのですか?ユーザー オブジェクトのを呼び出したときにsetUsername()、オブジェクトのローカル コピーを変更し (ただし、まだサーバーと同期していません)、作成save()して保存操作に失敗したときに、ローカル コピーには最新の変更が残っているためです。地元で作られた

于 2019-12-03T14:26:59.280 に答える