Tag: parcelable

与gson的Kotlin parcelize问题

我正在使用@parcelize for gson 这是我的class @Parcelize data class CommunityModel(@SerializedName(“post”) val post: PostModel, @SerializedName(“is_liked”) val isLiked: Boolean, @SerializedName(“post_like”) val postLike: QuestionModel, @SerializedName(“polling_options”) val pollingOptions: List, @SerializedName(“post_polled”) val postPolled: Boolean) : Parcelable 我得到错误Unable to invoke no-args constructor for class. Register an InstanceCreator with Gson for this type may fix this problem. Unable to invoke no-args constructor for class. […]

IllegalStateException:parcel.readString()不能为null

我把Intent Parcelable对象放到下一个Activity : val intent = Intent(mContext, ShowTestActivity::class.java) intent.putExtra("test", test) Log.d("myLog", "${intent.getParcelableExtra<Test>("test")}") // No problem mContext.startActivity(intent) 并在下一个Activity获取此对象: if (!intent.hasExtra("test")) throw Exception("Intent doesn't has 'test' extra") val test: Test = intent.getParcelableExtra("test") 这里是抛出异常: public open class QBase(): Parcelable { … protected constructor(parcel: Parcel?) : this() { parcel?.let { question = parcel.readString() // parcel.readString() must not be null […]

可自定义parcelable对象

我有一个具有类型ArrayList<>的成员变量的类。 这两个类实现parcelable。 我被困在如何完成对其他类的引用的类。 这是我有什么: data class Tab (val name: String, val title: String, val color: String, val sections: ArrayList<Section>) : Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readString(), parcel.readString(), parcel.readTypedList<Section>(sections, Section.CREATOR)) override fun writeToParcel(dest: Parcel?, flags: Int) { dest?.writeString(name) dest?.writeString(title) dest?.writeString(color) dest?.writeTypedList<Section>(sections) } override fun describeContents(): Int { return 0 } companion object CREATOR : […]

我怎样才能让我的自定义对象Parcelable?

我试图让我的对象Parcelable。 但是,我有自定义对象,这些对象有我做的其他自定义对象的ArrayList属性。 什么是最好的方法来做到这一点?

可以将空值传递给包裹吗?

是否可以在parcel一个对象的时候写入null给Parcel ,并且当再次进行重新编码时再返回null ? 假设我们有以下代码: public class Test implements Parcelable { private String string = null; public Test(Parcel dest, int flags) { source.writeString(string); } } 使用Parcel.readString()从parcel读取这个值时会得到NullPointerException吗? 或者我会得到一个null值?

使用Parcelable时,Kotlin编译错误

我正在尝试为我的课程实施Parcelable 。 Android Studio自动为我生成代码。 现在我的班级看起来像这样: @Parcelize data class BankCard(var owner: String, var number: String, var isDefaultCard: Boolean) : Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readString(), parcel.readByte() != 0.toByte()) { } override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(owner) parcel.writeString(number) parcel.writeByte(if (isDefaultCard) 1 else 0) } override fun describeContents(): Int { return 0 } companion […]

NoSuchMethodError在Kotlin中使用@Parcelize注释

我目前正在尝试实验(这可能是为什么它不工作…) @Parcelize注释生成@Parcelize代码。 大多数类型似乎工作正常,但我有问题的Serializable抛出一个NoSuchMethodError : 10-05 13:55:18.549 20808-20808/com.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.app, PID: 20808 java.lang.NoSuchMethodError: No virtual method writeSerializable(Ljava/util/Date;)V in class Landroid/os/Parcel; or its super classes (declaration of 'android.os.Parcel' appears in /system/framework/framework.jar) at com.app.models.Job.writeToParcel(Job.kt) at android.os.Parcel.writeParcelable(Parcel.java:1496) at android.os.Parcel.writeValue(Parcel.java:1402) at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) at android.os.Bundle.writeToParcel(Bundle.java:1157) at android.os.Parcel.writeBundle(Parcel.java:764) at android.content.Intent.writeToParcel(Intent.java:8687) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3082) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518) at android.app.Activity.startActivityForResult(Activity.java:4225) […]

Kotlin parcelable和arrayList of parcelables

我正在尝试编写一个parcelable数据对象传递给activityA到android应用程序中的activityB 。 我的对象是传递所有的数据,除了我的可用服务类arraylist data class AvailableService(val id: Int, val name: String, val description: String, val price: Double, val currency: String, val imageUrl: String) : Parcelable { companion object { @JvmField @Suppress("unused") val CREATOR = createParcel { AvailableService(it) } } protected constructor(parcelIn: Parcel) : this(parcelIn.readInt(), parcelIn.readString(), parcelIn.readString(), parcelIn.readDouble(), parcelIn.readString(), parcelIn.readString()) override fun writeToParcel(dest: Parcel?, flags: Int) […]

如何用kotlin @Parcelize使用null

这里是非常简单的代码: @Parcelize data class Inner(val a: Int): Parcelable @Parcelize data class Test(val a: Int, val inner: Inner?): Parcelable @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun testParcel() { val test = Test(0, null) val parcel = Parcel.obtain() parcel.writeParcelable(test, test.describeContents()) } } 我有可空的属性Test.inner 。 如果它不为空,代码工作正常,但是当它为空,那么我有例外: java.lang.NullPointerException: Attempt to invoke interface method 'void android.os.Parcelable.writeToParcel(android.os.Parcel, int)' on a null object […]

使用带有Kotlin数据类的Parceler与构造函数进行序列化

有没有办法使用Parcel的Kotlin数据类和构造函数进行序列化,而@ParcelProperty每个字段使用@ParcelProperty注释? 如果我尝试使用这样的库: @Parcel data class Valve @ParcelConstructor constructor(val size: Int) 我得到Error:Parceler: No corresponding property found for constructor parameter arg0 。 但是,如果我添加@ParcelProperty("size")它工作得很好。 这是为什么? 更新 : 还有另一种使用这个库的方法。 我可以删除@ParcelConstructor注释,但是我会得到错误 Error:Parceler: No @ParcelConstructor annotated constructor and no default empty bean constructor found. 我认为(还没有测试过)我也可以使所有的构造参数可选,并添加@JvmOverloads但有一个副作用,我必须检查类的所有属性,如果它们为null或不。 更新2 : 这对我来说是有效的: @Parcel data class Valve(val size: Int? = null) 简而言之,生成的Java类必须具有默认的空构造函数。 达到这个目的的一个方法就是按照上面的方法 – 所有变量都应该有默认值。