【发布时间】:2018-05-17 23:31:24
【问题描述】:
我的代码有奇怪的问题,我无法解释正在发生的任何事情。它在 Marshmallow 上崩溃,但在 Nougat 上却没有崩溃,这让这更加奇怪。
我可以指出发生错误但错误本身不清楚的行。我不确定什么是崩溃以及如何防止它。以下是详细信息:
当我尝试调用服务器时发生崩溃。为此,我使用 Retrofit 和 RxJava 并在 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