Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getSystemService TypeCastException_Android_Kotlin_Service - Fatal编程技术网

Android getSystemService TypeCastException

Android getSystemService TypeCastException,android,kotlin,service,Android,Kotlin,Service,我的应用程序类的onCreate方法中包含以下代码 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { getSystemService(Context.MIDI_SERVICE).also { MidiController.instance.midiManager = it as MidiManager } } 当我在我的设备上测试此代码时,我没有任何问题,但是一些用户设备报告以下错误 java.la

我的应用程序类的onCreate方法中包含以下代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getSystemService(Context.MIDI_SERVICE).also {
       MidiController.instance.midiManager = it as MidiManager
    }
}
当我在我的设备上测试此代码时,我没有任何问题,但是一些用户设备报告以下错误

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:4973)
  at android.app.ActivityThread.-wrap1 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1560)
  at android.os.Handler.dispatchMessage (Handler.java:111)
  at android.os.Looper.loop (Looper.java:207)
  at android.app.ActivityThread.main (ActivityThread.java:5765)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:789)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:679)
Caused by: kotlin.TypeCastException: 

我怀疑问题可能是因为我从应用程序类而不是活动调用getSystemService,这是一种错误的做法吗?如果不是,问题是什么?谢谢

我认为解决方案应该使用hasSystemFeature,而不是检查SDK版本

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) {
    getSystemService(Context.MIDI_SERVICE).also {
       MidiController.instance.midiManager = it as MidiManager
    }
}

我认为解决方案应该是使用hasSystemFeature,而不是检查SDK版本

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) {
    getSystemService(Context.MIDI_SERVICE).also {
       MidiController.instance.midiManager = it as MidiManager
    }
}

在您的应用程序中,您在哪里运行此代码?我在创建时在
内部运行它没有问题“这是一种糟糕的做法吗?”——这是完全正常的。除了您发布的内容之外,还有更多关于堆栈跟踪的内容吗?可能不是所有设备都具有midi功能,并且MidiManager系统服务返回null。尝试将null强制转换为kotlin非null类型可以解释stacktrace。是的,我想不是所有SDK超过23的设备都具有midi功能。我的错误是检查SDK版本,而不是使用HassystemFeature。在应用程序中,您正在运行此代码吗?我在创建时在
内部运行它没有问题“这是一种糟糕的做法吗?”——这是完全正常的。除了您发布的内容之外,还有更多关于堆栈跟踪的内容吗?可能不是所有设备都具有midi功能,并且MidiManager系统服务返回null。尝试将null强制转换为kotlin非null类型可以解释stacktrace。是的,我想不是所有SDK超过23的设备都具有midi功能。我的错误是检查SDK版本而不是使用hasSystemFeature