2016-07-20 23 views
12

Ich versuche, einen einfachen ungebundenen Dienst in Kotlin zu erstellen, aber ich kann nicht. Wenn ich onBind() Methode in Java überschreibe, kann ich null zurückgeben, aber in Kotlin es sagt, dass ich nur IBinder zurückgeben darf und nicht IBinder?, dh es kann nicht null sein. Irgendwelche Ideen, wie das behoben werden kann, außer dass die MyService-Klasse in Java umgeschrieben wird?Erstellen von ungebundenen Dienst in Kotlin

[Gelöst] Vielen Dank, Leute! Ich kann wirklich IBinder zu IBinder? ändern. Es klappt!!

+4

Welche Version von Kotlin verwenden Sie? Mit 1.0.3, als ich einen Dienst umwandelte, war die Methodensignatur "override fun onBind (intent: Intent): IBinder?" Und das Generieren der Überschreibung in Android Studio gab mir 'override fun onBind (intent: Intent?): IBinder' but Ich war in der Lage, dies zu 'IBinder?' Ohne Problem zu ändern – Enrico

Antwort

11

Wie Enrico erwähnt, können Sie einen Typ von IBinder in IBinder? ändern und es wird immer noch die Schnittstelle entsprechen.

Im Allgemeinen sollten Sie vorsichtig sein, wenn Sie Android Studio verwenden, um Android-Methoden zu überschreiben. Das eigentliche Problem tritt auf, wenn ein Nicht-Null-Typ generiert wird, wenn das System tatsächlich eine Nullreferenz zurückgeben kann. Es verursacht Laufzeit-Kotlin-Ausnahmen, die Sie wirklich nicht erwarten.

Wenn ich mich richtig erinnere hatte ich eine Menge Probleme beim Überladen Fragment Klasse und Methoden im Zusammenhang mit View Erstellung.