1) Скопируйте этот код в ваш проект
import android.util.Log;
import java.lang.reflect.Method;
import io.realm.RealmList;
import io.realm.RealmObject;
import com.company.project.models.IRealmCascade;
/**
*/
public class RealmUtils
{
public static void deleteCascade(RealmObject dataObject)
{
if (dataObject == null)
{
return;
}
if(IRealmCascade.class.isAssignableFrom(dataObject.getClass()))
{
for(Method method : dataObject.getClass().getSuperclass().getDeclaredMethods())
{
try {
//Ignore generated methods
if((method.getName().contains("realmGet$")) || (method.getName().contains("access$super")))
{
continue;
}
Class<?> resultType = method.getReturnType();
//Ignore non object members
if (resultType.isPrimitive()) {
continue;
}
if (RealmObject.class.isAssignableFrom(resultType)) {
//Delete Realm object
try {
RealmObject childObject = (RealmObject) method.invoke(dataObject);
RealmUtils.deleteCascade(childObject);
} catch (Exception ex) {
Log.e("REALM", "CASCADE DELETE OBJECT: " + ex.toString());
}
} else if (RealmList.class.isAssignableFrom(resultType)) {
//Delete RealmList items
try {
RealmList childList = (RealmList) method.invoke(dataObject);
while(childList.iterator().hasNext())
{
RealmObject listItem = (RealmObject)childList.iterator().next();
RealmUtils.deleteCascade(listItem);
}
} catch (Exception ex) {
Log.e("REALM", "CASCADE DELETE LIST: " + ex.toString());
}
}
}
catch (Exception ex)
{
Log.e("REALM", "CASCADE DELETE ITERATION: " + ex.toString());
}
}
}
dataObject.deleteFromRealm();
}
}
2) Добавить интерфейс в проект. Если ваш объект Realm реализует этот интерфейс, все дочерние объекты будут удалены после вызова deleteCascade. Если интерфейс не реализован, эта функция удаляет объект Realm, но не удаляет дочерние объекты.
public interface IRealmCascade {
}
3) Объявите свой объект Realm. Пример ниже.
public class NodeModel extends RealmObject implements IRITSerializable, IRealmCascade {
@PrimaryKey
@SerializedName("id") private String objId;
@SerializedName("parentId") private String parentId;
@SerializedName("contentType") private String nodeType;
@Required
@SerializedName("name") private String name;
@SerializedName("settings") private RealmList<ValueTypeModel> columns;
public String getObjId() {
return objId;
}
public void setObjId(String objId) {
this.objId = objId;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getNodeType() {
return nodeType;
}
public void setNodeType(String nodeType) {
this.nodeType = nodeType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RealmList<ValueTypeModel> getColumns() {
return columns;
}
public void setColumns(RealmList<ValueTypeModel> columns) {
this.columns = columns;
}
}
4) Вам необходимо вызвать RealmUtils.deleteCascade (realmObject); вместо этого realmObject.removeFromRealm(); Пример ниже данных обновления в локальной базе данных
for(NodeModel nodeItem: incomingData.getNodesList())
{
RealmResults<NodeModel> results = bgRealm.where(NodeModel.class).equalTo("objId", nodeItem.getObjId()).findAll();
if (results.size() > 0)
{
RealmUtils.deleteCascade(results.first());
}
bgRealm.copyToRealm(nodeItem);
}
Наслаждайтесь чистой DB! :)
переполнением стека для вопросов программирования. Какой у Вас вопрос? – CommonsWare
позвольте мне закончить его ... Я публикую его. –