【问题标题】:IncompatibleClassChangeError: Class 'java.lang.VirtualMachineError' does not implement interface 'java.lang.CharSequence'IncompatibleClassChangeError:类“java.lang.VirtualMachineError”未实现接口“java.lang.CharSequence”
【发布时间】:2018-05-17 23:31:24
【问题描述】:

我的代码有奇怪的问题,我无法解释正在发生的任何事情。它在 Marshmallow 上崩溃,但在 Nougat 上却没有崩溃,这让这更加奇怪。

我可以指出发生错误但错误本身不清楚的行。我不确定什么是崩溃以及如何防止它。以下是详细信息:

当我尝试调用服务器时发生崩溃。为此,我使用 RetrofitRxJava 并在 Kotlin 中执行此操作。这是我的代码:

fun login(username: String, password: String, callback: Login.OnLoginListener) {
    RestClient.getInstance().service
    .loginUser( //<- This line is crashing for no apparent reason
            Utils.RequestBodyParser.parseString(username),
            Utils.RequestBodyParser.parseString(password)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(
        { success ->
            (
            if (success.status)
                callback.onLoginSuccess()
            else
                callback.onLoginError()
            )
        },
        { error ->
            GenericErrorHandler.handleError(error, callback.retrieveContext())
        }
    )
}

这是 logcat 的输出:

java.lang.IncompatibleClassChangeError: Class 'java.lang.VirtualMachineError' does not implement interface 'java.lang.CharSequence' in call to 'java.lang.String java.lang.CharSequence.toString()' (declaration of 'java.lang.Throwable' appears in /system/framework/core-libart.jar)
  at fi.hohtolabs.kuuratablet.network.WebController$Companion.login(WebController.kt:19)
  at fi.hohtolabs.kuuratablet.presenter.LoginPresenter.login(LoginPresenter.kt:31)
  at fi.hohtolabs.kuuratablet.dialog.LoginDialog.lambda$onResume$2$LoginDialog(LoginDialog.java:74)
  at fi.hohtolabs.kuuratablet.dialog.LoginDialog$$Lambda$2.onClick(Unknown Source)
  at android.view.View.performClick(View.java:5198)
  at android.view.View$PerformClick.run(View.java:21147)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

有人对我应该做什么有任何建议吗? (我尝试清理、重建、重新启动和使缓存无效,删除 .gradle 文件夹和所有其他类似的东西,没有任何帮助)

【问题讨论】:

    标签: java android kotlin retrofit rx-java


    【解决方案1】:

    这个问题只出现在 Marshmellow 设备上,后来又出现了不同的问题。后来我得到了ArrayIndexOutOfBoundsException,终于发现了问题所在。

    问题是我的库有超过 64K 的方法,并且因为 Instant Run 已打开,所以没有 multidex 错误并且整个应用程序没有很好地编译。

    【讨论】:

    • 谢谢,我的问题是 Instant Run (on)
    • 我没有启用即时运行,而且我只在 android 6.0 上遇到同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2020-06-08
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多