Как добавить не примитивный объект в Realm - PullRequest
0 голосов
/ 08 января 2020

У меня есть два объекта Photo и Request, которые оба используют параметр Location. Я хотел бы сохранить эти объекты в Realm BDD, но Realm сообщает мне, что объект Location не поддерживается.

Это также указано в do c

Field types
Realm supports boolean, byte, short, int, long, float, double, String, Date and byte[] field types. The integer types byte, short, int, and long are all mapped to long within Realm. In addition to those standard field types, Realm supports subclasses of RealmObject and RealmList<? extends RealmObject> to model relationships.

The boxed types Boolean, Byte, Short, Integer, Long, Float and Double can also be used in model classes. These types may have the value null.

Is Есть ли обходной путь? Или я должен вместо этого выстрелить в комнату?

Вот запрос. java

package com.example.applicationpro.model;

import android.location.Location;
import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import io.realm.RealmModel;
import io.realm.annotations.RealmClass;

@RealmClass
public class Request implements Parcelable, RealmModel {

    private int mID;
    private String mDescription;
    private int mVolume;
    private Date mTimeStamp;
    private List<Photo> mPhotos;
    private Brand mBrand;
    private Enum<Status> mStatus;
    private Location mLocation;

    public Request() {}

    public Request(String mDescription, int mVolume, Date mTimeStamp, List<Photo> mPhotos, Brand brand, Enum<Status> statusEnum, Location location) {
        this.mDescription = mDescription;
        this.mVolume = mVolume;
        this.mTimeStamp = mTimeStamp;
        this.mPhotos = mPhotos;
        this.mBrand = brand;
        this.mStatus = statusEnum;
        this.mLocation = location;
    }

    public static final Creator<Request> CREATOR = new Creator<Request>() {
        @Override
        public Request createFromParcel(Parcel parcel) {
            return new Request(parcel);
        }

        @Override
        public Request[] newArray(int size) {
            return new Request[size];
        }
    };

    protected Request(Parcel in) {
        mID = in.readInt();
        mDescription = in.readString();
        mVolume = in.readInt();
        long tmpMTimeStamp = in.readLong();
        mTimeStamp = tmpMTimeStamp != -1 ? new Date(tmpMTimeStamp) : null;
        if (in.readByte() == 0x01) {
            mPhotos = new ArrayList<Photo>();
            in.readList(mPhotos, Photo.class.getClassLoader());
        } else {
            mPhotos = null;
        }
        mBrand = (Brand) in.readValue(Brand.class.getClassLoader());
        mStatus = (Enum) in.readValue(Enum.class.getClassLoader());
        mLocation = (Location) in.readValue(Location.class.getClassLoader());
    }

    public int getmID() {
        return mID;
    }

    public void setmID(int mID) {
        this.mID = mID;
    }

    public String getmDescription() {
        return mDescription;
    }

    public void setmDescription(String mDescription) {
        this.mDescription = mDescription;
    }

    public int getmVolume() {
        return mVolume;
    }

    public void setmVolume(int mVolume) {
        this.mVolume = mVolume;
    }

    public Date getmTimeStamp() {
        return mTimeStamp;
    }

    public void setmTimeStamp(Date mTimeStamp) {
        this.mTimeStamp = mTimeStamp;
    }

    public List<Photo> getmPhotos() {
        return mPhotos;
    }

    public void setmPhotos(List<Photo> mPhotos) {
        this.mPhotos = mPhotos;
    }

    public Brand getmBrand() {
        return mBrand;
    }

    public void setmBrand(Brand mBrand) {
        this.mBrand = mBrand;
    }

    public Enum<Status> getmStatus() {
        return mStatus;
    }

    public void setmStatus(Enum<Status> mStatus) {
        this.mStatus = mStatus;
    }

    public Location getmLocation() {
        return mLocation;
    }

    public void setmLocation(Location mLocation) {
        this.mLocation = mLocation;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(mID);
        parcel.writeString(mDescription);
        parcel.writeInt(mVolume);
        parcel.writeLong(mTimeStamp != null ? mTimeStamp.getTime() : -1L);
        if (mPhotos == null) {
            parcel.writeByte((byte) (0x00));
        } else {
            parcel.writeByte((byte) (0x01));
            parcel.writeList(mPhotos);
        }
        parcel.writeValue(mBrand);
        parcel.writeValue(mStatus);
        parcel.writeValue(mLocation);
    }

    @Override
    public String toString() {
        return "Request{" +
                "mID=" + mID +
                ", mDescription='" + mDescription + '\'' +
                ", mVolume=" + mVolume +
                ", mTimeStamp=" + mTimeStamp +
                ", mPhotos=" + mPhotos +
                '}';
    }
}

И мой файл RealmMigrations

package com.example.applicationpro.realm;

import android.location.Location;

import androidx.annotation.Nullable;

import com.example.applicationpro.model.Brand;
import com.example.applicationpro.model.Photo;
import com.example.applicationpro.model.Status;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.Objects;

import io.realm.DynamicRealm;
import io.realm.FieldAttribute;
import io.realm.RealmMigration;
import io.realm.RealmSchema;

public class RealmMigrations implements RealmMigration {

    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        final RealmSchema mSchema = realm.getSchema();

        if (oldVersion == 0) {
            mSchema.create("Brand")
                    .addField("mIDBrand", int.class, FieldAttribute.REQUIRED)
                    .addField("mName", String.class, FieldAttribute.REQUIRED);

            mSchema.create("Photo")
                    .addField("mID", int.class, FieldAttribute.REQUIRED, FieldAttribute.PRIMARY_KEY)
                    .addField("mName", String.class)
                    .addField("mPath", String.class, FieldAttribute.REQUIRED)
                    .addField("mTimeStamp", Date.class)
                    .addField("mLocation", Location.class);

            mSchema.create("Request")
                    .addField("mID", int.class, FieldAttribute.REQUIRED, FieldAttribute.PRIMARY_KEY)
                    .addField("mDescription", String.class, FieldAttribute.REQUIRED)
                    .addField("mVolume", int.class, FieldAttribute.REQUIRED)
                    .addField("mTimeStamp", Date.class, FieldAttribute.REQUIRED)
                    .addRealmListField("mPhotos", mSchema.get("Photo"))
                    .addRealmObjectField("mBrand", mSchema.get("Brand"))
                    .addField("mStatus", Status.class, FieldAttribute.REQUIRED)
                    .addField("mLocation", Location.class);

            oldVersion++;
        }
    }

    @Override
    public int hashCode() {
        return RealmMigrations.class.hashCode();
    }

    @Override
    public boolean equals(@Nullable Object obj) {
        if (obj == null) {
            return false;
        }

        return obj instanceof RealmMigrations;
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...