Как вставить RealmList в RealmDB - PullRequest
2 голосов
/ 15 апреля 2020

Я пытаюсь вставить списки областей в мою realmdb в моей первой вставке, нет проблем, но когда я вставляю другой realmList с другим классом, мои старые значения удаляются. Итак, как я могу вставить realmlist в БД? вставки выполняются отдельно.

RealmList<Product> insertedProduct = new RealmList<Product>();
RealmList<ProductSubCategory> insertedSubCategory = new RealmList<ProductSubCategory>();
RealmList<ProductMainCategory> insertedMainCategory = new RealmList<ProductMainCategory>();

... вставка в список областей в первый раз ...

 insertRealmList(insertedProduct); //inserting to realmDB first time
 insertRealmList(insertedSubCategory); //inserting to realmDB first time
 insertRealmList(insertedMainCategory); //inserting to realmDB first time

первая вставка в realmDB

Функция вставки RealmList

 private void insertRealmList(final RealmList realmObject) {
        mRealm = Realm.getDefaultInstance();
        realmTask = mRealm.executeTransactionAsync(
                new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.copyToRealmOrUpdate(realmObject);
                    }
                },
                new Realm.Transaction.OnSuccess() {
                    @Override
                    public void onSuccess() {
                        Log.i(TAG, "onSuccess: successfully inserted data");
                    }
                },
                new Realm.Transaction.OnError() {
                    @Override
                    public void onError(Throwable error) {
                        Log.i(TAG, "onError: error while inserting " + "error: " + error);
                    }
                }
        );
    }

... вставка в список областей во второй раз ...

insertRealmList(insertedLanguages); //insert realmDB second time

вторая вставка в realmDB

МОДЕЛЬ ПРОДУКТА

package Model;

import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.Ignore;
import io.realm.annotations.Index;
import io.realm.annotations.PrimaryKey;

public class Product extends RealmObject {

    @PrimaryKey
    @Index
    private int ID;
    @Index
    private int PLU_NO;
    private String PRODUCT_NAME;
    private String MAIN_CATEGORY;
    private String SUB_CATEGORY;
    private String TYPE;
    private String TUS;
    private Double PRICE;
    private String CALORIE;
    private String COOKING_TIME;
    private RealmList<String> PRODUCT_NAME_LANGUAGES;
    private RealmList<String> PRODUCT_DESCRIPTION_LANGUAGES;
    private String IMAGE_BASE_HORIZONTAL;    //4/3
    private String IMAGE_BASE_VERTICAL;      //16/9
    private String VIDEO_NAME;      //video name

    @Ignore
    private int AMOUNT;

    @Ignore
    private int WINDOW_AMOUNT = 1;


    public Product(int ID, int PLU_NO, String PRODUCT_NAME, String MAIN_CATEGORY, String SUB_CATEGORY, String TYPE, String TUS, Double PRICE, String CALORIE, String COOKING_TIME, RealmList<String> PRODUCT_NAME_LANGUAGES, RealmList<String> PRODUCT_DESCRIPTION_LANGUAGES, String IMAGE_BASE_HORIZONTAL, String IMAGE_BASE_VERTICAL, String VIDEO_NAME) {
        this.ID = ID;
        this.PLU_NO = PLU_NO;
        this.PRODUCT_NAME = PRODUCT_NAME;
        this.MAIN_CATEGORY = MAIN_CATEGORY;
        this.SUB_CATEGORY = SUB_CATEGORY;
        this.TYPE = TYPE;
        this.TUS = TUS;
        this.PRICE = PRICE;
        this.CALORIE = CALORIE;
        this.COOKING_TIME = COOKING_TIME;
        this.PRODUCT_NAME_LANGUAGES = PRODUCT_NAME_LANGUAGES;
        this.PRODUCT_DESCRIPTION_LANGUAGES = PRODUCT_DESCRIPTION_LANGUAGES;
        this.IMAGE_BASE_HORIZONTAL = IMAGE_BASE_HORIZONTAL;
        this.IMAGE_BASE_VERTICAL = IMAGE_BASE_VERTICAL;
        this.VIDEO_NAME = VIDEO_NAME;
    }

    public Product() {
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getPLU_NO() {
        return PLU_NO;
    }

    public void setPLU_NO(int PLU_NO) {
        this.PLU_NO = PLU_NO;
    }

    public String getPRODUCT_NAME() {
        return PRODUCT_NAME;
    }

    public void setPRODUCT_NAME(String PRODUCT_NAME) {
        this.PRODUCT_NAME = PRODUCT_NAME;
    }

    public String getMAIN_CATEGORY() {
        return MAIN_CATEGORY;
    }

    public void setMAIN_CATEGORY(String MAIN_CATEGORY) {
        this.MAIN_CATEGORY = MAIN_CATEGORY;
    }

    public String getSUB_CATEGORY() {
        return SUB_CATEGORY;
    }

    public void setSUB_CATEGORY(String SUB_CATEGORY) {
        this.SUB_CATEGORY = SUB_CATEGORY;
    }

    public String getTYPE() {
        return TYPE;
    }

    public void setTYPE(String TYPE) {
        this.TYPE = TYPE;
    }

    public String getTUS() {
        return TUS;
    }

    public void setTUS(String TUS) {
        this.TUS = TUS;
    }

    public Double getPRICE() {
        return PRICE;
    }

    public void setPRICE(Double PRICE) {
        this.PRICE = PRICE;
    }

    public String getCALORIE() {
        return CALORIE;
    }

    public void setCALORIE(String CALORIE) {
        this.CALORIE = CALORIE;
    }

    public String getCOOKING_TIME() {
        return COOKING_TIME;
    }

    public void setCOOKING_TIME(String COOKING_TIME) {
        this.COOKING_TIME = COOKING_TIME;
    }

    public RealmList<String> getPRODUCT_NAME_LANGUAGES() {
        return PRODUCT_NAME_LANGUAGES;
    }

    public void setPRODUCT_NAME_LANGUAGES(RealmList<String> PRODUCT_NAME_LANGUAGES) {
        this.PRODUCT_NAME_LANGUAGES = PRODUCT_NAME_LANGUAGES;
    }

    public RealmList<String> getPRODUCT_DESCRIPTION_LANGUAGES() {
        return PRODUCT_DESCRIPTION_LANGUAGES;
    }

    public void setPRODUCT_DESCRIPTION_LANGUAGES(RealmList<String> PRODUCT_DESCRIPTION_LANGUAGES) {
        this.PRODUCT_DESCRIPTION_LANGUAGES = PRODUCT_DESCRIPTION_LANGUAGES;
    }

    public String getIMAGE_BASE_HORIZONTAL() {
        return IMAGE_BASE_HORIZONTAL;
    }

    public void setIMAGE_BASE_HORIZONTAL(String IMAGE_BASE_HORIZONTAL) {
        this.IMAGE_BASE_HORIZONTAL = IMAGE_BASE_HORIZONTAL;
    }

    public String getIMAGE_BASE_VERTICAL() {
        return IMAGE_BASE_VERTICAL;
    }

    public void setIMAGE_BASE_VERTICAL(String IMAGE_BASE_VERTICAL) {
        this.IMAGE_BASE_VERTICAL = IMAGE_BASE_VERTICAL;
    }


    public String getVIDEO_NAME() {
        return VIDEO_NAME;
    }

    public void setVIDEO_NAME(String VIDEO_NAME) {
        this.VIDEO_NAME = VIDEO_NAME;
    }

    public int getAMOUNT() {
        return AMOUNT;
    }

    public void setAMOUNT(int AMOUNT) {
        this.AMOUNT = AMOUNT;
    }

    public int getWINDOW_AMOUNT() {
        return WINDOW_AMOUNT;
    }

    public void setWINDOW_AMOUNT(int WINDOW_AMOUNT) {
        this.WINDOW_AMOUNT = WINDOW_AMOUNT;
    }
    public void setDEFAULT_WINDOW_AMOUNT() {
        this.WINDOW_AMOUNT = 1;
    }
}

МОДЕЛЬ ЯЗЫКА

package Model;



   import io.realm.RealmObject;


    public class Language extends RealmObject {

        @PrimaryKey
        @Index
        private int ID;
        private String ICON;
        private String NAME;

        public Language(){

        }
        public Language(int ID, String ICON, String NAME) {
            this.ID = ID;
            this.ICON = ICON;
            this.NAME = NAME;
        }

        public int getId() {
            return ID;
        }

        public void setId(int id) {
            this.ID = id;
        }

        public String getICON() {
            return ICON;
        }

        public void setICON(String ICON) {
            this.ICON = ICON;
        }

        public String getName() {
            return NAME;
        }

        public void setName(String name) {
            this.NAME = name;
        }

    }

Другие две модели аналогичны продукту.

1 Ответ

1 голос
/ 15 апреля 2020

Пожалуйста, попробуйте следующий метод:

private <T extends RealmModel> void insertRealmList(final List<T> objects) {
    try (Realm realmInstance = Realm.getDefaultInstance()) {
        realmInstance.executeTransaction(realm -> {
            for (T object : objects) {
                realmInstance.insertOrUpdate(object);
            }
        });
    }
}

Надеюсь, это поможет!

...