错误:无法弄清楚如何将此字段保存到我的模型类中的数据库中



我正在开发一个新应用程序,但我在代码中遇到以下错误:

无法弄清楚如何将此字段保存到数据库中。你可以 考虑为其添加类型转换器。

我尝试了stackoverflow中的所有可能解决方案,但不起作用。

在我的文章下方。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类下方

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

}

要使用您的SourceTypeCoverter,您需要将以下注释添加到您的SportNewsDatabase

@TypeConverters(SourceTypeConverter.class)

另外,您的源型coconverter可能会缺少一种方法。您需要一种方法将对象转换为某种形式的原始形式,然后从原始返回到对象。像这样的东西

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

您可以在此处阅读有关此信息的更多信息,并使用ROOM

引用复杂数据

请记住使用ToString((很可能对此不起作用。您可能需要使用诸如gson之类的东西将对象转换为字符串和返回。


如果那不起作用,则可以随时尝试@embedded。Android室嵌入

对于查找SourceTypeConverter的房间,您必须通过以下方式注释数据库,DAO或实体来注册它:

@TypeConverters(SourceTypeConverter.class)

最新更新