2017-05-23 9 views
0

私はレルム内のデータベースを持っており、レルムオブジェクトを私がアダプタを認識するために作成したJavaオブジェクトとして渡す必要があります。レルムオブジェクトを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]); 
    } 
}; 

は、ムービーの作成者であると私RealmObjectは次のとおりです。私は他のものを取得するにはどうすればよい

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

+0

これは、[XYの問題]のように聞こえる(https://meta.stackexchange.com/a/66378/ 294714)、実際の使用例を説明してください。たとえば、通常、Realmを使用しているときは、アダプタがParcelable ...を受け取る必要はありません。 – EpicPandaForce

+0

私はMoviePOJOとしてオブジェクトを取得しようとしています。既に持っているインテントでそれを渡します。 – Domonique

+2

なぜIDで再クエリーするのではなく、オブジェクト全体を渡していますか? – EpicPandaForce

答えて

0

@ cricket_007が示唆するように、レルムDBからオブジェクトを取得してIntent(またはその逆)のどこかに送信したい場合、いくつかのオプションがあります。

これまでのところ、オブジェクト全体を送信しないようにするのが最良の方法です。自分のアプリ内でActivityまたはIntentServiceに送信するだけの場合は、主キー(おそらくmovieId)を送信してください。受信者は、レルムインスタンスを開き、同じオブジェクトを選択できます。これはからに至るまでより高速です。

あなたは絶対にあなたはこのように、アダプタを必要としている、小包なければならない場合:

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()); 
    } 
} 
関連する問題