96

プロジェクトを Kotlin に変換しています。モデル (エンティティでもあります) をデータ クラスにしようとしています。Moshi を使用して、API からの JSON 応答を変換します。

@Entity(tableName = "movies")
data class MovieKt(
    @PrimaryKey
    var id : Int,
    var title: String,
    var overview: String,
    var poster_path: String,
    var backdrop_path: String,
    var release_date: String,
    var vote_average: Double,
    var isFavorite: Int
)

次のエラーの原因でアプリをビルドできません

エンティティと Pojo には、使用可能なパブリック コンストラクターが必要です。空のコンストラクター、またはパラメーターがフィールドと (名前と型で) 一致するコンストラクターを使用できます。フィールドのセッターが見つかりません。

私が見つけた例は、これからそう遠くない

それを解決する方法についてのアイデアはありますか?

4

30 に答える 30

24

同じ問題がありました。@Ignore フィールドをクラス本体に移動できます。例えば ​​:

@Entity(tableName = "movies")
data class MovieKt(
    @PrimaryKey
    var id : Int,
    var title: String
){
    //here
    @Ignore var overview: String
 }
于 2019-12-27T09:27:25.417 に答える
2

Room のドキュメントで述べられているように、空のパブリック コンストラクターを作成する必要があります。同時に、他のカスタム コンストラクターを宣言する場合は、@Ignore注釈を追加する必要があります。

@Entity
public class CartItem {
    @PrimaryKey
    public int product_id;
    public int qty;

    public CartItem() {
    }

    @Ignore
    public CartItem(int product_id, int count) {
        this.product_id = product_id;
        this.qty = count;
    }
}
于 2020-03-19T10:40:52.440 に答える
1

データクラスには使用せず、代わりに通常のクラスを使用してください。この方法は問題を解決します

于 2019-02-06T15:47:56.060 に答える
1

私は同じ問題を抱えていました。その理由は、 dao のクエリで取得していたデータのタイプが、返されたデータのタイプと等しくなかったためです。

私のデータベースの id のタイプは String で、dao を次のように変更しました。

@Query("SELECT id FROM content_table")
fun getIds(): Flow<List<Int>>

に :

@Query("SELECT id FROM content_table")
fun getIds(): Flow<List<String>>
于 2021-05-17T18:17:30.163 に答える