如何使我的领域对象成为Java对象? [英] How do I make my realm object a java object?

查看:100
本文介绍了如何使我的领域对象成为Java对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在领域中有一个数据库,需要将领域对象作为我创建的java对象传递,以便适配器识别它.

I have a database in realm and need to pass a realm object as a java object I have created in order for my adapter to recognise it.

public final static Parcelable.Creator<MoviePOJO> CREATOR = new Creator<MoviePOJO>() {

    @SuppressWarnings({
            "unchecked"
    })
    public MoviePOJO createFromParcel(Parcel in) {
        MoviePOJO instance = new MoviePOJO();
        instance.posterPath = ((String) in.readValue((String.class.getClassLoader())));
        instance.overview = ((String) in.readValue((String.class.getClassLoader())));
        instance.releaseDate = ((String) in.readValue((String.class.getClassLoader())));
        instance.id = ((Integer) in.readValue((Integer.class.getClassLoader())));
        instance.originalTitle = ((String) in.readValue((String.class.getClassLoader())));
        instance.backdropPath = ((String) in.readValue((String.class.getClassLoader())));
        instance.voteAverage = ((Double) in.readValue((Double.class.getClassLoader())));
        return instance;
    }

    public MoviePOJO[] newArray(int size) {
        return (new MoviePOJO[size]);
    }
};

是电影创作者,我的RealmObject是:

is the movie creator and my RealmObject is:

public class FavoritesItem extends RealmObject implements Parcelable {

    @PrimaryKey  private Integer movieId;
    private String moviePoster;
    private String movieBackdrop;
    private String movieTitle;
    private String movieOverview;
    private Double movieRating;
    private String movieReleaseDate;
}

我该如何彼此联系?

推荐答案

假设如@ cricket_007所建议的那样,您想要从Realm数据库中获取一个对象,然后将其发送到Intent上的某个位置(反之亦然) ),您有两种选择.

Presuming that, as @cricket_007 suggests, you want to get an object from a Realm DB and then send it somewhere on an Intent (or vice-versa), you have a couple options.

到目前为止,最好的办法是避免发送整个对象.如果您只是将其发送到自己的应用程序中的ActivityIntentService,则只需发送主键(可能是movieId)即可.收件人可以打开一个Realm实例并选择相同的对象.这将比拼写还要快 .

By far the best would be to avoid sending the whole object. If you are just sending it, say, to an Activity or an IntentService, within your own app, just send the primary key (probably movieId). The recipient can open a Realm instance and select the same object. This will be far faster than even parcelling.

如果绝对必须打包,您将需要一个适配器,如下所示:

If you absolutely must parcel, you are going to want an adapter, like this:

public class MovieParcelable implements Parcelable {

    public static final Creator<MovieParcelable> CREATOR = new Creator<MovieParcelable>() {
        @Override
        public MovieParcelable createFromParcel(Parcel in) {
            int id = in.readInt();
            String poster = in.readString();
            // ...
            double rating = in.readDouble();
            String releaseDate = in.readString();
            return new MovieParcelable(id, poster, ..., rating, releaseDate);
        }

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

    private final Movie movie;

    public MovieParcelable(Movie movie) {
        this.movie = movie;
    }

    MovieParcelable(int id, String poster, ..., double rating, String releaseDate) {
        this(new Movie(id, poster, ..., rating, releaseDate));
    }

    public Movie getMovie() { return movie; }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(movie.getId());
        dest.writeString(movie.getPoster());
        // ...
        dest.writeDouble(movie.getRating());
        dest.writeString(movie.getReleaseDate());
    }
}

这篇关于如何使我的领域对象成为Java对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆