如何使我的领域对象成为java对象?

如何使我的领域对象成为java对象?,java,android,realm,Java,Android,Realm,我在realm中有一个数据库,需要将realm对象作为我创建的java对象传递,以便适配器识别它 public final static Parcelable.Creator<MoviePOJO> CREATOR = new Creator<MoviePOJO>() { @SuppressWarnings({ "unchecked" }) public MoviePOJO createFromParcel(Parcel i

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

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

如何将一个对象传送到另一个对象?

假设,正如@cricket_007所建议的,您希望从域数据库获取一个对象,然后通过
意图将其发送到某个地方(反之亦然),您有两个选项

到目前为止,最好是避免发送整个对象。如果您只是将其发送到自己的应用程序中的
活动
IntentService
,只需发送主键(可能是
电影ID
)。收件人可以打开一个领域实例并选择相同的对象。这将比包裹快得多

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

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());
    }
}
公共类MovieParcelable实现Parcelable{
公共静态最终创建者=新创建者(){
@凌驾
公共电影包裹createFromParcel(包裹中){
int id=in.readInt();
String poster=in.readString();
// ...
双重评级=in.readDouble();
String releaseDate=in.readString();
归还新电影包(id、海报等、评级、发行日期);
}
@凌驾
公共电影包[]新阵列(整数大小){
返回新的电影包[大小];
}
};
私人电影;
公共电影包(电影){
这部电影=电影;
}
电影包裹(内部id,字符串海报,…,双重评级,字符串发布日期){
这部(新电影(id、海报、评级、发行日期));
}
公共电影getMovie(){return Movie;}
@凌驾
public int descripbecontents(){return 0;}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeInt(movie.getId());
dest.writeString(movie.getPoster());
// ...
dest.writeDouble(movie.getRating());
dest.writeString(movie.getReleaseDate());
}
}

这听起来像是一个问题,请解释您的实际用例。例如,通常您的适配器不需要接收包裹。。。。特别是当你使用Realm.so时,我试着用MoviePOJO来检索对象,以传递它,我已经有了一个意图为什么你要传递整个对象而不是通过ID来重新查询它?不相关和离题,但是你知道有一个包对象的
readString
readDouble
方法吗?如果两个类在建模同一个对象,为什么一开始就有两个类?如果他们不是在为同一件事建模,那么“一个接一个”意味着什么?
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());
    }
}