Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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 错误:无法实例化接收器。。。没有零参数构造函数_Android_Kotlin - Fatal编程技术网

Android 错误:无法实例化接收器。。。没有零参数构造函数

Android 错误:无法实例化接收器。。。没有零参数构造函数,android,kotlin,Android,Kotlin,我的BroadcastReceiver类有一个问题,它作为内部类在我的MainActivity中。 每次单击应用程序通知中的按钮时,都会出现以下错误: java.lang.RuntimeException: Unable to instantiate receiver com.oniktech.testmediaservice.MainActivity$MediaReceiver: java.lang.InstantiationException: java.lang.Class<com.

我的BroadcastReceiver类有一个问题,它作为内部类在我的MainActivity中。 每次单击应用程序通知中的按钮时,都会出现以下错误:

java.lang.RuntimeException: Unable to instantiate receiver com.oniktech.testmediaservice.MainActivity$MediaReceiver: java.lang.InstantiationException: java.lang.Class<com.oniktech.testmediaservice.MainActivity$MediaReceiver> has no zero argument constructor
这是我的内心世界:

inner class MediaReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            MediaButtonReceiver.handleIntent(mediaSession, intent)
        }
    }
我知道在这种情况下不应该使用内部类。但我必须在其中使用我的“mediaSession”对象。 我该怎么办?
谢谢您的帮助。

问题-1:您的
MediaReceiver
应该是
嵌套的
而不是
内部的
。在Kotlin中,默认情况下嵌套类是静态的。所以删除内部关键字

class MediaReceiver : BroadcastReceiver() {
}
问题-2:您想从BroadcastReceiver访问外部类属性,这不是一个好做法。你应该避免。但若你们仍然想这样做,你们应该使那个属性是静态的,并在接收器内部使用它。检查下面的示例实现

class MainActivity {
    companion object {
        var mediaSession: MediaSessionCompat? = null
    }

    class MediaReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            MediaButtonReceiver.handleIntent(mediaSession, intent)
        }
    }
}

问题-1:您的
MediaReceiver
应该是
嵌套的
而不是
内部的
。在Kotlin中,默认情况下嵌套类是静态的。所以删除内部关键字

class MediaReceiver : BroadcastReceiver() {
}
问题-2:您想从BroadcastReceiver访问外部类属性,这不是一个好做法。你应该避免。但若你们仍然想这样做,你们应该使那个属性是静态的,并在接收器内部使用它。检查下面的示例实现

class MainActivity {
    companion object {
        var mediaSession: MediaSessionCompat? = null
    }

    class MediaReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            MediaButtonReceiver.handleIntent(mediaSession, intent)
        }
    }
}

必须是静态的或非静态的,但在父类中注册:Remove-inner,默认情况下它应该是静态的。@Jarvis是的,但我如何做,而不是Kotlin中的。从类MediaReceiver中删除inner关键字。@Jarvis则我不能在MediaReceiver类中使用我的mediaSession对象。我在MainActivity中定义了mediaSession,我需要在这里使用它。我真的很困惑。必须是静态的或非静态的,但注册在父类中:Remove-inner,默认情况下它应该是静态的。@Jarvis是的,但我怎么能比Kotlin做得更好。从类MediaReceiver中删除inner关键字。@Jarvis那么我就不能在MediaReceiver类中使用我的mediaSession对象了。我在MainActivity中定义了mediaSession,我需要在这里使用它。我真的很困惑,谢谢。这真的很有帮助,谢谢。这真的很有帮助。