Android 在Kotlin中将单例服务转换为对象会使我的应用程序崩溃

Android 在Kotlin中将单例服务转换为对象会使我的应用程序崩溃,android,kotlin,service,initialization,singleton,Android,Kotlin,Service,Initialization,Singleton,我有一个目标,我将发起: public class SIPManager extends Service implements OnPortSIPEvent { private static SIPManager instance; public static SIPManager getInstance() { return instance; } } 我会从我的应用程序开始我会这样做: if (SIPManager.getInstance

我有一个目标,我将发起:

public class SIPManager
    extends Service
    implements OnPortSIPEvent
{

private static SIPManager instance;

public static SIPManager getInstance()
    {
        return instance;
    }
}
我会从我的应用程序开始我会这样做:

if (SIPManager.getInstance() != null && callStrategy != null && callStrategy == CallStrategy.SIP) {
    if (SIPManager.getInstance().isSipRegistered && (SIPManager.getInstance().isLoginInProgress || SIPManager.getInstance()
                                    .inActiveCall()!! || SIPManager.getInstance().isRegistrationRefreshValid!!)) {
                       ..... do stuff
    }
}
但在转换成Kotlin后,我得到:

2019-07-17 14:39:51.517 21173-21173/com.xelion.android.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xelion.android.debug, PID: 21173
java.lang.ExceptionInInitializerError
    at com.xelion.android.App$Companion.initServices(App.kt:103)
    at com.xelion.android.App.onCreate(App.kt:41)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920)
    at android.app.ActivityThread.access$1100(ActivityThread.java:200)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
    at android.content.ContextWrapper.getSystemService(ContextWrapper.java:728)
    at com.xelion.android.sip.SIPManager.onCreate(SIPManager.kt:316)
    at com.xelion.android.sip.SIPManager.<clinit>(SIPManager.kt:126)
    at com.xelion.android.App$Companion.initServices(App.kt:103) 
    at com.xelion.android.App.onCreate(App.kt:41) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:200) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6718) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
2019-07-17 14:39:55.561 21173-21173/com.xelion.android.debug 
E/CrashlyticsCore: Failed to execute task.
java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask.get(FutureTask.java:206)
    at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:41)
    at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:321)
    at com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:301)
    at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:42)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1955)
我没有名字。我应该为我的单身汉创作吗

我第一件事就是尝试从App.kt类中调用。但仍然只是崩溃

我的单身汉现在看起来像这样

您不能将
Android
服务设置为Kotlin
对象。Kotlin无法创建
服务
实例;只有Android框架可以


SIPManager
中将
对象更改为
class
。然后,还原Java代码中必须具有的
startService()
调用,在您需要之前的某个时间启动
SIPManager

我们无法帮助您使用未出现在您的问题中的Kotlin代码。看起来像是您的
SIPManager中的上下文。onCreate
未在my App.kt onCreate调用SIPManager.onCreate()中初始化。这就是它崩溃的地方。我需要在init{}中添加一些东西吗?在我看来,单例代码看起来比kotlin更像java,我现在正在添加翻译。只要一秒钟谢谢。那我就把它作为一门课,找个同伴
object SIPManager : Service(), OnPortSIPEvent {
       override fun onCreate() {

    super.onCreate()

    portSipSdk = PortSipSdk()
    incomingCallToneGenerator = IncomingCallToneGenerator()

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val channel = NotificationChannel(channelID, "Xelion", NotificationManager.IMPORTANCE_DEFAULT)
        channel.enableLights(true)
        notificationManager.createNotificationChannel(channel)
    }
    showServiceNotifiCation()

    subscribeToCallsNotifications()
    }
}