当前位置: 首页 > 知识库问答 >
问题:

服务错误“...没有零参数构造函数”

佘茂才
2023-03-14

我想启动一项服务,我使用:

inner class HomeService : Service() {
    override fun onBind(intent: Intent?): IBinder? {
        return null
    }

    override fun onCreate() {
        super.onCreate()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        notification(light.toString())
        return START_STICKY
    }

    override fun onDestroy() {
        super.onDestroy()
    }
}

启动它:

val i = Intent(this@Main3Activity, HomeService()::class.java)
startService(i)

我的应用崩溃后,logcat返回:

java.lang.Class 在 android.app.活动线程.handle上没有零参数构造函数创建服务(活动线程.java:3201) 在 android.app.活动线程.-wrap5(活动线程.java) 在 android.app.活动线程$H.handleMessage(活动线程.java:1586) 在 android.os.Handler.dispatchMessage(处理程序.java:102) 在 android.os.Looper.looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(活动线程.java:6186) 在 java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 由: java.lang.实例化异常: java.lang.Class 在 java.lang.Class.newinstance(Native Method) 在 android.lang.Class.newinstance(Native Method) 在 android.app.ActivityThread.handleCreateService(ActivityThread.java:3198) 在 android.app.ActivityThread.-wrap5(ActivityThread.java)

我该怎么办?

共有2个答案

商辰钊
2023-03-14
class HomeService() : Service() {
    constructor(context: Context) : this() {
        Log.d("TAG","ANOTHER CONSTRUCTOR")
    }
}

现在,您可以通过两种方式使用该服务

  1. val Intent=Intent(this@Main3Activity,HomeService::class.java)
  2. val Intent=Intent(this@Main3Activity,HomeService(上下文)::class.java)
汝彭薄
2023-03-14

您正在通过在意图创建代码中写下 HomeService() 来手动创建实例。创建服务是框架的任务,您可以在不创建实例的情况下传递其类:

val i = Intent(this@Main3Activity, HomeService::class.java)
startService(i)

更新:

除了上面提到的,你的类也不能是内部类。它可以是嵌套的,但不能是内部类,因为这些类包含对它们所在类的引用。这意味着系统不能自己创建你的服务实例——它无法提供外部类供它引用。

 类似资料:
  • 我是新的Android和Java,并试图使基于位置的应用程序。 编辑 我做了一个非常非常简单的测试代码,得到了同样的错误。这是java: 我也犯了同样的错误。以下是我的应用程序级构建中的依赖项。格雷德尔: 原帖 我试图使用ViewModel和LiveData来更新用户位置,因为我知道这是生命周期感知的最佳方式。我有一个默认的地图活动... 一个扩展LiveData以存储用户位置的类。。。 以及一个

  • 我正在尝试使用recyclerview和room库创建一个简单的ToDoList应用程序。在使用room和mvvm架构方面,我正在遵循android开发者代码实验室,我似乎遇到了困难。我已经设置了应用程序的每一层,但在尝试使用ViewModelProvider实例化ViewModel时出现了一个错误。下面是我的ViewModel类中的代码。 } 下面是我试图初始化ViewModel的main片段中

  • 我通过本文档了解LiveData和ViewModel。在文档中,ViewModel类具有构造函数, 但是,当我运行代码时,会出现异常: 原因:java.lang.运行时异常:无法创建类的实例UserViewModel原因:java.lang.实例异常:java.lang.类没有零参数构造函数

  • 我正在使用并试图将我的导入我的类。 当使用ViewModel查看Google的hilt文档时,我们可以看到他们能够将注入到所述

  • 我试图在谷歌地图中显示一个位置地址,但当我为获取地址启动意向服务时,它将显示错误“无法实例化服务”。 我使用此链接显示位置地址。 这是我的代码: 在这里我开始意图服务:

  • 注:在标记为副本之前,请仔细阅读。我已经尝试了所有现有的答案。 我在用匕首2。 视图模型实例已在活动中成功创建,但当我从同一活动中打开BottomSheet对话框时,无法创建实例。 日志: 用户界面。搜索viewmodel。SearchViewModel