2

我正在使用 Kotlin 编写一个项目:

  • Kotlin 版本:1.1.3-2
  • Parcerler 版本 1.1.9
  • 领域版本 3.2.0

我正在将 Parceler 用于带有 RealmObjects 的 FragmentArgs 并出现以下崩溃。
Parceler:找不到 io.realm.RealmList 类型的读/写生成器

  1. 我的班级工作是这样的:
@Parcel(value = Parcel.Serialization.BEAN, analyze = arrayOf(Job::class))
            open class Job(
                    @PrimaryKey open var tweetId: Long? = -1L,
                    open var text: String = "",
                    open var title: String = "",
                    open var longitude: Double? = null,
                    open var latitude: Double? = null,
                    open var link: String = "",
                @ParcelPropertyConverter(RealmStringListParcelConverter::class)
                    open var imageUrls: RealmList<RealmString>? = null
            ) : RealmObject()
  1. 类 RealmString 看起来像这样: 我的类 RealmString.kt 像这样:
@Parcel(value = Parcel.Serialization.BEAN, analyze = arrayOf(RealmString::class))
                open class RealmString(
                        open var value: String = ""
                ) : RealmObject()
  1. RealmListParcelConverter 类如下所示:
public class RealmListParcelConverter implements TypeRangeParcelConverter<RealmList<? extends RealmObject>, RealmList<? extends RealmObject>>
{
    private static final int NULL = -1;

    @Override
    public void toParcel(RealmList<? extends RealmObject> input, Parcel parcel)
    {
        parcel.writeInt(input == null ? NULL : input.size());
        if(input != null)
        {
            for(RealmObject item : input)
            {
                parcel.writeParcelable(Parcels.wrap(item), 0);
            }
        }
    }

    @Override
    public RealmList fromParcel(Parcel parcel)
    {
        int       size = parcel.readInt();
        RealmList list = new RealmList();
        for(int i = 0; i < size; i++)
        {
            Parcelable parcelable = parcel.readParcelable(getClass().getClassLoader());
            list.add((RealmObject) Parcels.unwrap(parcelable));
        }
        return list;
    }
}

更新

我试过 add implementations = RealmStringRealmProxy 和 implementations = JobRealmProxy ,仍然遇到同样的问题。

更新 2

将Realm 版本更新到3.5.0,仍然遇到同样的问题。

4

1 回答 1

1

最后我得到了这个答案的一个解决方案。您需要的只是添加setter到我的模型Job中。我将在这里给出我的整个代码:

  1. 我的班级工作是这样的:
@Parcel(value = Parcel.Serialization.BEAN, analyze = arrayOf(Job::class))
            open class Job(
                    @PrimaryKey open var tweetId: Long? = -1L,
                    open var text: String = "",
                    open var title: String = "",
                    open var longitude: Double? = null,
                    open var latitude: Double? = null,
                    open var link: String = "",

            ) :RealmObject(){
@ParcelPropertyConverter(RealmStringListParcelConverter::class)
                        open var imageUrls: RealmList<RealmString>? = null set}
  1. 类 RealmString 看起来像这样: 我的类 RealmString.kt 像这样:
@Parcel(value = Parcel.Serialization.BEAN, analyze = arrayOf(RealmString::class))
                open class RealmString(
                        open var value: String = ""
                ) : RealmObject()
  1. RealmStringListParcelConverter 类如下所示:
   class RealmStringListParcelConverter : RealmListParcelConverter<RealmString>() {
    override fun itemToParcel(input: RealmString?, parcel: Parcel?) {
        parcel?.writeParcelable(Parcels.wrap(RealmString::class.java, input), 0)
    }

    override fun itemFromParcel(parcel: Parcel?): RealmString {
        return Parcels.unwrap(parcel?.readParcelable<Parcelable>(RealmString::class.java.classLoader))
    }
}
于 2017-07-20T08:14:20.167 回答