Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 域以有效的方式删除孤立对象_Android_Database_Realm_Realm Mobile Platform_Realm List - Fatal编程技术网

Android 域以有效的方式删除孤立对象

Android 域以有效的方式删除孤立对象,android,database,realm,realm-mobile-platform,realm-list,Android,Database,Realm,Realm Mobile Platform,Realm List,我有一个包含BeaconData列表的类BeaconBase public class BeaconBase extends RealmObject { @PrimaryKey private Integer checkInID; @SerializedName("beacons") @Expose private RealmList<BeaconData> beacons; } public class BeaconData exten

我有一个包含BeaconData列表的类BeaconBase

public class BeaconBase extends RealmObject {

    @PrimaryKey
    private Integer checkInID;

    @SerializedName("beacons")
    @Expose
    private RealmList<BeaconData> beacons;
}

public class BeaconData extends RealmObject {

    @SerializedName("scanId")
    @Expose
    private String scanId;

    @SerializedName("distance")
    @Expose
    private String distance;

}
公共类BeaconBase扩展RealmObject{
@主键
私有整数校验ID;
@序列化名称(“信标”)
@暴露
私人RealmList信标;
}
公共类BeaconData扩展RealmObject{
@SerializedName(“scanId”)
@暴露
私有字符串scanId;
@序列化名称(“距离”)
@暴露
私有字符串距离;
}
海狸通常是巨大的。大约每小时100000行。当我删除相关的BeaconBase记录时,如何有效地删除BeaconData

我只有BeaconBase中的主键

因此,当我删除BeaconBase记录时,数千条BeaconData记录被孤立。如何有效地处理这种情况?

try(realmr=Realm.getDefaultInstance)){
try(Realm r = Realm.getDefaultInstance)) {
    r.executeTransaction((realm) -> {
        RealmResults<BeaconBase> beaconsToDelete = realm.where(BeaconBase.class)./*query here*/.findAll();
        for(int i = beaconsToDelete.size() - 1; i >= 0; i--) {
            BeaconBase beaconBase = beaconsToDelete.get(i);
            beaconBase.getBeacons().deleteAllFromRealm();
            beaconBase.deleteFromRealm();
        }
    });
}
r、 executeTransaction((领域)->{ RealmResults beaconstodelet=realm.where(BeaconBase.class)。/*在此处查询*/.findAll(); 对于(int i=beacostoDelete.size()-1;i>=0;i--){ BeaconBase BeaconBase=beaconsToDelete.get(i); beaconBase.getBeacons().deleteAllFromRealm(); beaconBase.deleteFromRealm(); } }); }
尽管要稍微多用一点,您也可以这样做:

public class BeaconBase extends RealmObject {

    @PrimaryKey
    private Integer checkInID;

    @SerializedName("beacons")
    @Expose
    private RealmList<BeaconData> beacons;
}

public class BeaconData extends RealmObject {

    @SerializedName("scanId")
    @Expose
    private String scanId;

    @SerializedName("distance")
    @Expose
    private String distance;

    @LinkingObjects("beacons")
    private final RealmResults<BeaconBase> beaconDataOf = null;
}

try(Realm r = Realm.getDefaultInstance)) {
    r.executeTransaction((realm) -> {
        realm.where(BeaconBase.class)./*query here*/.findAll().deleteAllFromRealm();
        realm.where(BeaconData.class).isEmpty("beaconDataOf").findAll().deleteAllFromRealm();
    });
}
公共类BeaconBase扩展RealmObject{
@主键
私有整数校验ID;
@序列化名称(“信标”)
@暴露
私人RealmList信标;
}
公共类BeaconData扩展RealmObject{
@SerializedName(“scanId”)
@暴露
私有字符串scanId;
@序列化名称(“距离”)
@暴露
私有字符串距离;
@链接对象(“信标”)
private final RealmResults beaconDataOf=null;
}
try(realmr=Realm.getDefaultInstance)){
r、 executeTransaction((领域)->{
realm.where(BeaconBase.class)。/*在此处查询*/.findAll().deleteAllFromRealm();
realm.where(BeaconData.class).isEmpty(“beaconDataOf”).findAll().deleteAllFromRealm();
});
}

在您提到beaconBase.getBeacons()的第一种方式中,deleteAllFromRealm();但是在信标列表上,我们不能执行deleteAllFromRealm,对吗?如果这是真的,您可以用
getBeacons().where().findAll().deleteAllFromRealm()替换它谢谢你的回复。实际上,我正在考虑在BeaconData中使用主键,它是否可以通过级联删除来解决我的问题?您仍然需要以与选项#2tanks相同的方式删除信标数据以获得回复。我遵循了方法2。