応答が返ってきたので、次のようにします。
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("");
}
}
これは、私の Beacon.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)
なぜこれが起こるのですか?レルム インスタンスを再作成して再クエリすると、削除されたオブジェクトが返されるのはなぜですか? 残りのオブジェクトを表示したいだけです。
そうでない場合、サーバーから更新されなかったオブジェクトを確認して削除する別の方法はありますか?