How do I make my realm object a java object?

不羁的心 提交于 2020-01-25 21:13:42

问题


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]);
    }
};

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;
}

How do I get one to the other?


回答1:


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.

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());
    }
}


来源:https://stackoverflow.com/questions/44146041/how-do-i-make-my-realm-object-a-java-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!