【问题标题】:Compile Time Error When Converting RealmObject Class To Kotlin将 RealmObject 类转换为 Kotlin 时出现编译时错误
【发布时间】:2017-10-25 22:14:13
【问题描述】:

这是我原来的 RealmObjectParceler 注释。

@Parcel(implementations = {AlbumRealmProxy.class},
        value = Parcel.Serialization.BEAN,
        analyze = {Album.class})
public class Album extends RealmObject {

    @PrimaryKey
    @SerializedName("id")
    private String id;
    @SerializedName("artist_id")
    private String artistId;
    @SerializedName("title")
    private String title;
    @SerializedName("artist_name")
    private String artist;
    @SerializedName("images")
    private RealmList<Artwork> artwork;
    @SerializedName("tracks")
    private RealmList<Track> tracks;
    @SerializedName("artist_bio")
    private String artistBio;

    @ParcelPropertyConverter(RealmListParcelConverter.class)
    public void setArtwork(RealmList<Artwork> artwork) {
        this.artwork = artwork;
    }

    @ParcelPropertyConverter(RealmListParcelConverter.class)
    public void setTracks(RealmList<Track> tracks){
        this.tracks = tracks;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public RealmList<Artwork> getArtwork() {
        return artwork;
    }

    public String getArtist() {
        return artist;
    }

    public String getArtistId() {
        return artistId;
    }

    public String getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public RealmList<Track> getTracks() {
        return tracks;
    }

    public String getArtistBio() {
        return artistBio;
    }
}

在转换为Kotlin 时,我得到以下生成的类;

@Parcel(implementations = arrayOf(AlbumRealmProxy::class), value = Parcel.Serialization.BEAN, analyze = arrayOf(Album::class))
open class Album : RealmObject() {

    @PrimaryKey
    @SerializedName("id")
    var id: String? = null
    @SerializedName("artist_id")
    val artistId: String? = null
    @SerializedName("title")
    var title: String? = null
    @SerializedName("artist_name")
    var artist: String? = null
    @SerializedName("images")
    @set:ParcelPropertyConverter(RealmListParcelConverter::class)
    open var artwork: RealmList<Artwork>? = null
    @SerializedName("tracks")
    @set:ParcelPropertyConverter(RealmListParcelConverter::class)
    open var tracks: RealmList<Track>? = null
    @SerializedName("artist_bio")
    val artistBio: String? = null
}

编译时错误如下:

Error:(5, 17) Unresolved reference: AlbumRealmProxy
Error:(16, 27) Only 'const val' can be used in constant expressions
Error:(16, 35) Unresolved reference: AlbumRealmProxy
Error:(16, 35) An annotation parameter must be a compile-time constant

[KOTLIN] deleting /Users/dev/RAG Apps/Songa/app/build/tmp/kotlin-classes/debug on error
[KOTLIN] deleting /Users/dev/RAG Apps/Songa/app/build/tmp/kotlin-classes/debug on error

我正在为Parceler 使用Kotlin kapt 注释处理器,但该项目仍然无法编译。

是否需要一些额外的配置?

【问题讨论】:

  • 您真的需要 Parcelable 用于 托管 RealmProxy 类吗?
  • @EpicPandaForce 是的。我并不总是将对象保存到领域,因此在某些情况下重新查询将不起作用。
  • 但是如果你不保存对象,那么它就不是一个托管 RealmProxy,它是一个非托管 RealmObject。因此问题。因为implementations={__RealmProxy::class.java} 用于打包托管代理。

标签: android realm kotlin parceler


【解决方案1】:

就我而言,我有这个包:com.path.model.Album,我必须使用:

import io.realm.com_path_model_AlbumRealmProxy

...
@Parcel(implementations = arrayOf(com_path_model_AlbumRealmProxy::class)

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多