Разбор массива строк JSON в Pojo / Entity для базы данных sqlite для Android (Комната) - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь реализовать реляционную базу данных с использованием комнаты базы данных в Android.например ниже JSON, как я могу создать сущность для жанров ?или мне нужно разобрать вставить его вручную без использования GSON?

{
    "imdb_code": "tt0419887",
    "title": "The Kite Runner",
    "title_english": "The Kite Runner",
    "title_long": "The Kite Runner (2007)",
    "slug": "the-kite-runner-2007",
    "year": 2007,
    "rating": 7.6,
    "runtime": 128,
    "genres": [
         "Drama",
         "Comedy"
    ]
}

Мне нужно сериализовать класс, как.

data class Movie(

@field:SerializedName("small_cover_image")
val smallCoverImage: String? = null,

@field:SerializedName("year")
val year: Int? = null,

@field:SerializedName("description_full")
val descriptionFull: String? = null,

@field:SerializedName("rating")
val rating: Double? = null,

@field:SerializedName("large_cover_image")
val largeCoverImage: String? = null,

@field:SerializedName("title_long")
val titleLong: String? = null,

@field:SerializedName("language")
val language: String? = null,

@field:SerializedName("yt_trailer_code")
val ytTrailerCode: String? = null,

@field:SerializedName("title")
val title: String? = null,

@field:SerializedName("mpa_rating")
val mpaRating: String? = null,

@field:SerializedName("genres")
val genres: List<String?>? = null
)

мне нужно

 @field:SerializedName("genres")
    val genres: List<Genres?>? = null,

вместо @field: SerializedName ("genres") val genres: Список?= ноль,

1 Ответ

2 голосов
/ 18 апреля 2019

Вам необходимо создать модель для вашего JSON.Просто создайте модель вручную или перейдите на сайт, где вы можете автоматически создавать модели из JSON. JSONSchemaToPojo Если вы используете JSONSchematoPojo, вы получите что-то вроде этого:

package com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Movie {

@SerializedName("imdb_code")
@Expose
private String imdbCode;
@SerializedName("title")
@Expose
private String title;
@SerializedName("title_english")
@Expose
private String titleEnglish;
@SerializedName("title_long")
@Expose
private String titleLong;
@SerializedName("slug")
@Expose
private String slug;
@SerializedName("year")
@Expose
private Integer year;
@SerializedName("rating")
@Expose
private Double rating;
@SerializedName("runtime")
@Expose
private Integer runtime;
@SerializedName("genres")
@Expose
private List<String> genres = null;

public String getImdbCode() {
return imdbCode;
}

public void setImdbCode(String imdbCode) {
this.imdbCode = imdbCode;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getTitleEnglish() {
return titleEnglish;
}

public void setTitleEnglish(String titleEnglish) {
this.titleEnglish = titleEnglish;
}

public String getTitleLong() {
return titleLong;
}

public void setTitleLong(String titleLong) {
this.titleLong = titleLong;
}

public String getSlug() {
return slug;
}

public void setSlug(String slug) {
this.slug = slug;
}

public Integer getYear() {
return year;
}

public void setYear(Integer year) {
this.year = year;
}

public Double getRating() {
return rating;
}

public void setRating(Double rating) {
this.rating = rating;
}

public Integer getRuntime() {
return runtime;
}

public void setRuntime(Integer runtime) {
this.runtime = runtime;
}

public List<String> getGenres() {
return genres;
}

public void setGenres(List<String> genres) {
this.genres = genres;
}

}

Для ваших жанров вы можете просто создать жанры List<String> или иметь представление ENUM для жанров.как List<GENRE> жанры.Если вы хотите использовать ENUM, вам нужно указать конвертер для ypur Enum.

    @Database(entities = {
      MovieEntity.class
    }, version = 1)
    @TypeConverters(GenreConverter.class)
    public abstract class MovieDatabase extends RoomDatabase {
         public abstract MovieDao movieDao();
    }

public class GenreConverter {

    @TypeConverter
    public GENRE fromNumber(Integer value) {
        return GENRE.fromNumber(value);
    }

    @TypeConverter
    public Integer toNumber(GENRE type) {
        if (type == null) {
            return null;
        } else {
            return type.getNumberRepresentation();
        }
    }
}
...