小编jor*_*jSB的帖子

SQLite需要具有唯一约束(Android Room注释)

我正在使用Room来设置包含3个表的数据库。我正在尝试从“文章”表中为2个表(标题和多媒体)设置外键,而不是主键。

请参见下面的代码。我认为我正确使用了批注,但是它仍然给我以下错误:

错误:com.articlesregistry.data.Multimedia具有引用com.articlesregistry.data.Article(original_id)的外键(article_original_id),但com.articlesregistry.data.Article在这些列上没有唯一索引,也不是其列首要的关键。SQLite要求对引用的父列具有唯一约束,因此您必须向具有(original_id)列的com.articlesregistry.data.Article添加唯一索引。

和类:

文章:


    @Entity(tableName = "article",
        indices={
                @Index(value="uid"),
                @Index(value="original_id")
        })
public class Article {

    @Ignore
    ArrayList<Multimedia> multimediaArrayList;

    @Ignore
    ArrayList<Headline> headlineArrayList;

    @Expose(deserialize = false)
    @NonNull
    @PrimaryKey(autoGenerate = true)
    private int uid;

    @Expose(deserialize = false)
    @ColumnInfo(name = "favourite")
    private Boolean favourite;

    // Json - API
    @SerializedName("web_url")
    @ColumnInfo(name = "web_url")
    private String web_url;

    @SerializedName("snippet")
    @ColumnInfo(name = "snippet")
    private String snippet;

    @SerializedName("source")
    @ColumnInfo(name = "source")
    private String source;

    @SerializedName("pub_date")
    @ColumnInfo(name = "pub_date")
    private String pub_date;

    @SerializedName("document_type")
    @ColumnInfo(name = "document_type")
    private String document_type; …
Run Code Online (Sandbox Code Playgroud)

sqlite android annotations android-room

4
推荐指数
1
解决办法
1469
查看次数

从Room观察LiveData会导致PagedListAdapter刷新,ViewModel也会在方向更改时刷新数据

我正在构建一个使用ArticleBoundaryCallback初始化对API的调用并将响应存储在Room中的应用。我还使用LiveData收听该表,并在PagedListAdapter中显示项目。

问题在于,每次将新数据插入到Room(Article)表中时,整个列表都会刷新。

同样,在配置更改时,似乎再次获取了整个数据(ViewModel不保留它,RecyclerView被重新创建)。

每次插入时,RecyclerView都会跳转(如果插入的是新数据,则跳转几行;如果将新数据替换为旧数据,则跳转到开头)。

整个代码在此GitHub存储库中

我的课程是:

文章:

@Entity(tableName = "article",
    indices={@Index(value="id")})public class Article {
@PrimaryKey(autoGenerate = false)
@SerializedName("_id")
@Expose
@NonNull
private String id;
@SerializedName("web_url")
@Expose
private String webUrl;
@SerializedName("snippet")
@Expose
private String snippet;
@SerializedName("print_page")
@Expose
private String printPage;
@SerializedName("source")
@Expose
private String source;
@SerializedName("multimedia")
@Expose
@Ignore
private List<Multimedium> multimedia = null;
Run Code Online (Sandbox Code Playgroud)

第DAO条:

@Dao
public interface ArticleDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
long insert(Article article);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void update(Article... repos);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertArticles(List<Article> articles);


@Delete
void delete(Article... …
Run Code Online (Sandbox Code Playgroud)

android-livedata android-viewmodel android-paging mutablelivedata

4
推荐指数
1
解决办法
626
查看次数