我正在开发一个新应用程序,但我在代码中遇到以下错误:
无法弄清楚如何将此字段保存到数据库中。你可以 考虑为其添加类型转换器。
我尝试了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)