领域崩溃项目已删除.但我首先重新查询 Realm



我得到一个回应,我这样做:

if (jsonObject != null && jsonObject.has("results")) {
try {
final JSONArray array = jsonObject.getJSONArray("results");
Realm realm = Realm.getInstance(PSApplicationClass.Config);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
try {
realm.delete(Beacon.class);
realm.createOrUpdateAllFromJson(Beacon.class, array);
} catch (Exception e) {
Log.e("", "error is: " + e.getMessage());
}
if (back != null)
back.onResponse("");
}
});
realm.close();
} catch (Exception e) {
Log.e("", "error trying to fetch user beacons: " + e.getMessage());
if (back != null)
back.onResponse("");
}
}

这是我的信标.java模型类。 现在,在我的活动中,我这样做:

public void setBeaconsInList() {
Realm realm = Realm.getInstance(PSApplicationClass.Config);
RealmResults<Beacon> beaconsResults = realm.where(Beacon.class).findAll();
if (beaconsResults != null && beaconsResults.size() > 0) {
for (Beacon beacon : beaconsResults) {
for (Beacon beacon : beaconsResults) {
if (!beacons.contains(beacon)) {
if (beacon.getUser_vehicle() != null) {
beacons.add(0, beacon);
userBeaconAdapter.addItemFirst(beacon);
} else {
beacons.add(beacon);
userBeaconAdapter.addItem(beacon);
}
}
}
}
}
userBeaconAdapter.notifyDataSetChanged();
realm.close();
}

我收到此错误:

10-16 17:39:09.527: E/AndroidRuntime(27720): java.lang.IllegalStateException: Object is no longer valid to operate on. Was it deleted by another thread?
10-16 17:39:09.527: E/AndroidRuntime(27720):    at io.realm.internal.UncheckedRow.nativeGetIndex(Native Method)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at io.realm.internal.UncheckedRow.getIndex(UncheckedRow.java:137)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at io.realm.BeaconRealmProxy.equals(BeaconRealmProxy.java:851)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at java.util.ArrayList.contains(ArrayList.java:339)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at nl.hgrams.passenger.activities.PSUserBeaconsActivity.setBeaconsInList(PSUserBeaconsActivity.java:144)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at nl.hgrams.passenger.activities.PSUserBeaconsActivity$2.onResponse(PSUserBeaconsActivity.java:126)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at nl.hgrams.passenger.model.vehicle.Beacon$1.onResponse(Beacon.java:117)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at nl.hgrams.passenger.utils.WSCalls$1.onResponse(WSCalls.java:98)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at nl.hgrams.passenger.utils.WSCalls$1.onResponse(WSCalls.java:77)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at android.os.Handler.handleCallback(Handler.java:739)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at android.os.Handler.dispatchMessage(Handler.java:95)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at android.os.Looper.loop(Looper.java:148)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at android.app.ActivityThread.main(ActivityThread.java:5417)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at java.lang.reflect.Method.invoke(Native Method)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
10-16 17:39:09.527: E/AndroidRuntime(27720):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

为什么会这样?如果我重新创建我的领域实例,然后重新查询,为什么它会返回已删除的对象? 我只想显示其余的对象。

如果没有,是否有其他方法可以检查和删除未从服务器更新的对象?

多亏了奥兰多的评论,我想通了。 我的列表正在与适配器中的对象进行比较,并且由于我的更改,适配器中的对象已经过时了。这就是我的逻辑出错的地方。并不是说新查询已过时,而是我没有清除适配器。 所以在修复它之前这样做:

beacons.clear();
userBeaconAdapter.clearItems();

最新更新