人生难得几回搏,此时不搏待何时。这篇文章主要讲述Android AIDL:从java更改代码到kotlin之后项目崩溃相关的知识,希望能为你提供帮助。
这些是我的项目AIDL-Client,AIDL-Server的链接。脚步:
- 请安装两个apks。
- 然后单击“BIND设备按钮”
- “IBindDeviceCallback:deviceName:tpd deviceBrand:loop”在客户端项目中打印
- 在AIDL-Server项目中将“AIDLService.java”更改为“AIDLService.kt”,然后安装apk。
- 然后单击AIDL-server项目的“BIND设备按钮”
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter deviceCertifcate
at android.os.Parcel.readException(Parcel.java:1697)
at android.os.Parcel.readException(Parcel.java:1646)
at com.loop.ILoopService$Stub$Proxy.bindDevice(ILoopService.java:88)
at com.client.MainActivity$mServiceConnection$1.onServiceConnected(MainActivity.kt:53)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1516)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1544)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
它看起来像android / kotlin的问题而不是我的问题。
关于这次崩溃的任何想法,如何在kotlin中修复它?
答案异常看起来像来自Android的原因是因为它是在进程之间传递的。
在客户端代码中的
MainActivity.kt
第53行,您将bindDevice
deviceCertificate
传递给byte[]
。例外情况是告诉您这不能为空。将服务从Java转换为Kotlin时,默认情况下将方法参数视为非null,
deviceCertifcate: ByteArray
。如果你告诉Kotlin这个参数可以为null,它就不会崩溃。这是通过用?
(即deviceCertifcate: ByteArray?
)声明类型来实现的。有关更多信息,请参阅the Kotlin docs on Null-Safety.
【Android AIDL(从java更改代码到kotlin之后项目崩溃)】在普通的Kotlin应用程序中,这甚至不会编译,但由于这通过AIDL跨越进程边界,编译器无法捕获此问题。
推荐阅读
- android studio media player null对象引用
- 单击注册会导致Android应用程序崩溃
- 你可能不知道Symfony2控制器的5种快捷方式
- 如何在Doctrine 2(独立或symfony 2和3)中轻松选择随机行
- 如何使用C#在WinForms应用程序中实现Sciter(轻量级HTML和CSS UI引擎)
- 如何在服务器的生产环境中轻松部署symfony2项目
- Swiftmailer(轻松轻松地从php发送邮件)
- 如何使用ILSpy反编译.NET Framework程序集(读取其源代码)
- 如何在WinForms中使用带有C#的SSH.NET(同步和异步)访问SFTP服务器