繁体   English   中英

错误:无法找出如何将该字段保存到模型类中的数据库中

[英]error: Cannot figure out how to save this field into database in my model class

我正在开发一个新的应用程序,但是我的代码中出现以下错误:

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

我已经尝试过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);
    }

}

为了使用SourceTypeCoverter您需要在SportNewsDatabase类中添加以下注释

@TypeConverters(SourceTypeConverter.class)

另外,您的SourceTypeConverter可能缺少方法。 您需要一种方法将Object转换为某种形式的图元,然后从该图元转换回Object。 像这样

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 Room

为了使Room能够找到SourceTypeConverter您必须通过以下方式注释数据库,Dao或实体来注册它:

@TypeConverters(SourceTypeConverter.class)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM