2017-05-23 36 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),請解釋您的實際使用案例。例如,通常您的適配器不需要接收Parcelable ....尤其是當您使用Realm時。 – EpicPandaForce

+0

所以我試圖檢索對象作爲一個MoviePOJO傳遞它的意圖我已經有 – Domonique

+2

爲什麼你傳遞整個對象,而不是通過ID重新查詢它? – EpicPandaForce

回答

0

假設@ cricket_007建議你想從Realm DB獲得一個對象,然後將它發送到Intent的某處(反之亦然),你有幾個選項。

到目前爲止,最好的辦法是避免發送整個對象。如果您只是將它發送到ActivityIntentService,則可以在您的應用程序中發送主鍵(可能爲movieId)。收件人可以打開Realm實例並選擇相同的對象。這將是遠遠比即使parcelling更快

如果你絕對必須包裹,你會希望有一個適配器,就像這樣:

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