Ошибка службы "... не имеет конструктора с нулевым аргументом" - PullRequest
0 голосов
/ 27 июня 2018

Я хочу запустить сервис, я использую:

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.ActivityThread.handleCreateService (ActivityThread.java:3201) на android.app.ActivityThread.-wrap5 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1586) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6186) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:889) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779) Вызывается: java.lang.InstantiationException: java.lang.Class не имеет конструктора с нулевым аргументом в java.lang.Class.newInstance (собственный метод) на android.app.ActivityThread.handleCreateService (ActivityThread.java:3198) на android.app.ActivityThread.-wrap5 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1586) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6186) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:889) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779)

что мне делать?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018
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(context)::class.java)
0 голосов
/ 27 июня 2018

Вы создаете экземпляр вручную, записывая HomeService() в свой код создания Intent. Создание сервиса является задачей фреймворка, и вы можете передать его класс, не создавая экземпляр:

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

Обновление:

В дополнение к вышесказанному, ваш класс также не может быть внутренним классом. Он может быть вложенным, но не может быть внутренним классом, потому что те содержат ссылку на класс, внутри которого они находятся. Это означает, что система не может создать экземпляр вашей службы самостоятельно - у нее нет способа предоставить внешний класс для ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...