【问题标题】:Parcelize annotation in AIDL: Incompatible types: Object cannot be converted to MyCustomObjectAIDL 中的 Parcelize 注释:不兼容的类型:Object 无法转换为 MyCustomObject
【发布时间】:2018-11-18 08:54:54
【问题描述】:

我正在将我的模型类重写为 Kotlin,它必须是 Parcelable 并在 AIDL 中使用:

@Parcelize
data class MyCustomObject(val value1: String, val value2: String) : Parcelable

在编译期间它会崩溃并出现错误:

错误:不兼容的类型:对象无法转换为 MyCustomObject

并在生成的代码中指向这一行:

if ((0!=_reply.readInt())) {
    _result = com.mypackagename.MyCustomObject.CREATOR.createFromParcel(_reply);
}

我将此注释用于其他目的,没关系,但到目前为止我发现在 AIDL 中不匹配。

有什么想法吗?

编辑:5 天后,我创建了 a ticket for this issue,没有任何评论。

【问题讨论】:

  • 它是否适用于 java?
  • 您还有 MyCustomObject.aidl(描述您的数据类的那个吗?)
  • @IvanMilisavljevic,是的,确实如此。我也有那个 object.aidl。
  • 对不起,我还在使用 java,我最好的猜测是 parcelable 生成器和 Kotlin 数据类有问题。您是否尝试清理和重建项目的一个愚蠢建议?
  • @IvanMilisavljevic,是的,以这种方式尝试过。问题在于注释本身。在 kotlin 中可打包的样板也可以正常工作。

标签: android kotlin parcelable aidl kotlin-android-extensions


【解决方案1】:

这是 Kotlin 中的一个错误,所以我将此问题重定向到 JetBrains。 你可以在这里追踪它:KT-25807

发生这种情况,因为createFromParcel() 不返回类T,而是Object

UPD

Parcelize 注释现在可由 Google 维护,该问题已在 kotlin 版本 1.5 中得到修复。+ https://issuetracker.google.com/issues/110131003

【讨论】:

  • AIDL 中使用 parcelized 的辅助工具有什么解决方案吗?有同样的问题
  • Parcelable 的样板实现。即使优先级设置为“高”,这个错误到目前为止还没有解决...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2021-12-20
  • 2016-10-17
  • 2017-03-29
  • 1970-01-01
相关资源
最近更新 更多