ошибка: не могу понять, как сохранить это поле в базе данных в моем классе модели - PullRequest
0 голосов
/ 19 мая 2019

Я разрабатываю новое приложение, но в моем коде появляется следующая ошибка:

Не могу понять, как сохранить это поле в базе данных. Вы можете рассмотрите возможность добавления конвертера типов для него.

Я перепробовал все возможные решения от stackoverflow, но не сработал.

ниже моего класса модели Article.java

@Entity(
        tableName = "article",
        foreignKeys = @ForeignKey(
                entity = Source.class,
                parentColumns = "id",
                childColumns = "source"
        ))

public class Article {
    @PrimaryKey
    @SerializedName("source")
    @NonNull
    @Expose

    @ColumnInfo(name ="source")
    private Source source;

    public Source getSource() {
        return source;
    }

    public void setSource(Source source) {
        this.source = source;
    }

    @SerializedName("author")
    @Expose
    @ColumnInfo(name = "author")
    private String author;
    @SerializedName("title")
    @Expose
    @ColumnInfo(name = "title")
    private String title;
    @SerializedName("description")
    @Expose
    @ColumnInfo(name = "description")
    private String description;
    @SerializedName("url")
    @Expose
    @ColumnInfo(name = "url")
    private String url;
    @SerializedName("urlToImage")
    @Expose
    @ColumnInfo(name = "urlToImage")
    private String urlToImage;

    @SerializedName("publishedAt")
    @Expose
    @ColumnInfo(name = "publishedAt")
    private String publishedAt;
    @SerializedName("content")
    @Expose
    @ColumnInfo(name = "content")
    private String content;





    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrlToImage() {
        return urlToImage;
    }

    public void setUrlToImage(String urlToImage) {
        this.urlToImage = urlToImage;
    }

    public String getPublishedAt() {
        return publishedAt;
    }

    public void setPublishedAt(String publishedAt) {
        this.publishedAt = publishedAt;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

ниже Source.java

ниже класса Дао

@Dao
public interface SportNewsDao {

    @Query("SELECT * FROM article")
    List<Article> getArticles();

    @Insert
    void insertAll(Article... article);
    @Delete
    void delete(Article article);

    @Update
    void update(Article article);

}

ниже класса базы данных

@Database(entities = {Article.class,Source.class}, version = 1, exportSchema = false)
public  abstract class SportNewsDatabase extends RoomDatabase {
  public  abstract SportNewsDao sportNewsDao();
}

below SourceTypeConverter.java
public class  SourceTypeConverter {

    @TypeConverter
    public static Source ConvertSource(Source source){
        return source ==   null ? null : new Source(source);
    }

}

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Чтобы использовать SourceTypeCoverter, вам необходимо добавить следующую аннотацию к вашему SportNewsDatabase классу

@TypeConverters(SourceTypeConverter.class)

Кроме того, в вашем SourceTypeConverter может отсутствовать метод.Вам нужен метод для преобразования вашего Объекта в некоторую форму примитива, а затем из примитива обратно в ваш Объект.Примерно так

public class  SourceTypeConverter {
    @TypeConverter
    public static String ConvertSource(Source source){
        return source == null ? null : source.toString();
    }

    @TypeConverter
    public static Source ConvertSource(String source){
        return source == null ? null : new Source(source);
    }
}

Подробнее об этом можно прочитать здесь, Ссылка на сложные данные с использованием комнаты

Имейте в виду, что использование toString (), скорее всего, не будет работать дляэтот.вам может понадобиться что-то вроде Gson, чтобы преобразовать ваш объект в строку и обратно.

Если это не сработает, вы всегда можете попробовать @embedded. Встроенная комната Android

0 голосов
/ 19 мая 2019

Чтобы Комната была найдена SourceTypeConverter, вы должны зарегистрировать ее, пометив свою базу данных, Dao или сущность:

@TypeConverters(SourceTypeConverter.class)
...