我得到了很多IllegalStateExceptions,它们对我来说很难调试。当我从RealmAdapter中删除一个领域对象时,就会发生这种情况。对于RealmAdapter,我使用的是'io.realm:android-adapters:1.3.0‘版本。
这就是我在适配器中长按时删除对象的方法:
//Delete message object
new MaterialDialog.Builder(holder.cardView.getContext()).title("Delete")
.content("Delete message?")
.positiveText("YES")
.negativeText("Cancel")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
//Call delete
ApiManager.ApiManagerService apiManagerService = ApiManager.createService(ApiManager.ApiManagerService.class);
apiManagerService.deleteMessage(message.getId()).enqueue(new Callback<Void>() {
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
Logger.d("delete message onResponse callback");
//Delete from realm
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
try {
message.deleteFromRealm();
} catch(Exception e) {
e.printStackTrace();
}
realm.commitTransaction();
//Notify adapter
notifyDataSetChanged();
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
Logger.d("delete message onFailure callback");
}
});
}
})
.show();
return false;
}从适配器内部删除对象的正确方式是什么?
发布于 2016-11-24 04:01:13
这
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
Logger.d("delete message onResponse callback");
//Delete from realm
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
try {
message.deleteFromRealm();
} catch(Exception e) {
e.printStackTrace();
}
realm.commitTransaction();
//Notify adapter
notifyDataSetChanged();
}应该是
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
Logger.d("delete message onResponse callback");
//Delete from realm
final long messageId = message.getId();
Realm realm = Realm.getDefaultInstance(); // TODO: use Realm bound to lifecycle
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.where(Message.class).equalTo("messageId", messageId).findAll().deleteAllFromRealm();
}
});
realm.close();
//Notify adapter
////notifyDataSetChanged();
}https://stackoverflow.com/questions/40765322
复制相似问题