java - 验证者拒绝类 - Kotlin
问题描述
我正在 Android Studio 中制作应用程序并不断收到“java.lang.VerifyError”。它在我使用@Parcelize 声明的一个类(Place 类)上,以传递一个包含 Place 对象的 ArrayList。我知道它与它自动生成的 writeToParel(Parcel, Int) 方法有关,但这就是我能弄清楚的全部。
我不知道为什么它一直出现,我已经完成了以下推荐的解决方案,但没有任何帮助:以下(类似 SO 帖子上建议的解决方案)不起作用:
- 清理并重建(甚至尝试手动清理)
- 使缓存无效并重新启动 IDE
我知道自动“打包”是一项实验性功能,所以也许它只是一个错误 - 如果是这样,我可以尝试什么解决方法?
从我创建的 Place 类创建对象时,错误开始。我在下面复制了 Place.kt、log 和 build.grade 的相关部分。提前致谢
地点.kt
@Parcelize
class Place constructor (var name:String, var placeID:String, var
description:String, var photoRef:String,
var price:Int, var rating:Int,
var location:Array<Double>) : Parcelable {
var googleURL : String
var lat : Double
var lng : Double
// Initialization instructions
init{
this.lat = location[0]
this.lng = location[1]
googleURL = makeGoogleMapsURL()
}
...
日志
06-18 15:55:19.174 5815-5815/com.example.daniel.digit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.daniel.digit, PID: 5815
java.lang.VerifyError: Verifier rejected class com.example.daniel.digit.Place: void com.example.daniel.digit.Place.writeToParcel(android.os.Parcel, int) failed to verify: void com.example.daniel.digit.Place.writeToParcel(android.os.Parcel, int): [0x48] register v3 has type Precise Reference: java.lang.Double but expected Double (Low Half) (declaration of 'com.example.daniel.digit.Place' appears in /data/app/com.example.daniel.digit-5DnxZcCKWzN_9Wj-TMpmIQ==/split_lib_slice_7_apk.apk)
at com.example.daniel.digit.MainActivity$onCreate$1.onClick(MainActivity.kt:79)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25883)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
摇篮
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'org.jetbrains.kotlin.android.extensions'
androidExtensions {
experimental = true
}
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.daniel.digit"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'com.beust:klaxon:3.0.1'
implementation "org.jetbrains.anko:anko:$anko_version"
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.google.android.gms:play-services-places:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
解决方案
我不确定您的课程的用法,但我看到错误提到了,Double
所以我的建议是:
- 除非你真的需要一个
Array<Double>
which 等价于:Double[]
在 java 中,你可以使用:DoubleArray
which 转换为double[]
(原始用法会让你的类更容易打包)。
还要尽量让你的课程更简单。data class
如果此类的唯一目的是保存数据,并且如果需要所有数据,则可以使用 aconstructor
从定义中删除单词:。
推荐阅读
- ios - 是否可以从 swift 包中加载 nib 文件?
- python - 如何计算 numpy 1d 数组中特定值的组?
- javascript - RSA-SHA1 签名在 JavaScript 和 PHP 中不同
- c - 查找程序卡在哪里 C
- python - 从字符串创建嵌套列表
- ffmpeg - 将 hls 文件切割成许多小的“.ts”文件或保留一个大的“.ts”文件。哪个更好?
- python - 如何在 python 中使用训练有素的 Tensorflow Lite 模型?
- python - 我可以使用另一个类内部的函数中的变量吗?
- javascript - 在 JavaScript 中使用 Selenium 处理“接受 Cookie”弹出窗口
- react-native - 发送正文 React Native - PHP