Невозможно удалить пользователя Realm

Я вхожу в Realm с помощью SyncCredentials, позволяя создать пользователя в виде кода ниже:

SyncCredentials credentials = SyncCredentials.usernamePassword(username, password, true);
SyncUser.logInAsync(credentials, AUTH_URL, new SyncUser.Callback<SyncUser>() {
}

И после того, как я хочу удалить этого пользователя в Realm с кодом ниже:

String id = SyncUser.current().getIdentity();
PermissionUser permissionUser = realm.where(PermissionUser.class).equalTo("id", id).findFirst();
if (permissionUser != null) {
    permissionUser.getPrivateRole().removeMember(id);
    permissionUser.getPrivateRole().deleteFromRealm();
    if (permissionUser.getRoles() != null) {
        permissionUser.getRoles().deleteAllFromRealm();
    }
    permissionUser.deleteFromRealm();
}

Этот код работает успешно, но я проверил Realm Studio, этот пользователь все еще существует. Пожалуйста, помогите мне с этой проблемой, большое спасибо.


person Ben Jima    schedule 07.12.2018    source источник


Ответы (2)


Все изменения данных должны происходить в рамках транзакции

источник: https://realm.io/docs/java/latest/

пример:

// obtain the results of a query
final RealmResults<Dog> results = realm.where(Dog.class).findAll();

realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
    // remove single match
    results.deleteFirstFromRealm();
    results.deleteLastFromRealm();

    // remove a single object
    Dog dog = results.get(5);
    dog.deleteFromRealm();

    // Delete all matches
    results.deleteAllFromRealm();
}
});
person DennisVA    schedule 19.12.2018
comment
Спасибо за ваш ответ @PrisonMike, но я думаю, что у меня есть ответ на этот вопрос. - person Ben Jima; 20.12.2018
comment
Я не понимаю, почему и как ваш ответ решает проблему. Я думал, проблема в том, что вы не можете удалить своего пользователя области? это не имеет ничего общего с OkHttp - person DennisVA; 20.12.2018

Спасибо за всех, но я нашел решение здесь:

String url = RealmConstants.AUTH_URL + "/user/" + SyncUser.current().getIdentity();
OkHttpClient okHttpClient = RetrofitClient.ClientHolder.getOkHttpClient();
Request request = new Request.Builder()
                .url(url)
                .addHeader("Authorization", token.value())
                .addHeader("Accept", "application/json, text/plain, */*")
                .addHeader("Content-Type", "application/json")
                .delete()
                .build();
okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) {
        callback.onFailure(new ClientError(e.hashCode(), e.getMessage()));
    }

    @Override
    public void onResponse(@NonNull Call call, @NonNull Response response) {
        callback.onSuccess(null);
    }
});
person Ben Jima    schedule 20.12.2018