0

Ich versuchte Kotlin in meinem Android-Projekt. Es gibt einen Broadcast-Empfänger für Netzwerkänderungsereignisse in meiner Aktivität. Code ist wie folgt:registerReceiver() zeigt Fehler für überladene Methode

BaseActivity.kt

abstract class BaseActivity : AppCompatActivity() { 

     private val networkChangeReceiver = NetworkChangeReceiver() 


     override fun onStart() { 
      super.onStart() 
      registerReceiver(
        receiver = networkChangeReceiver, 
        intentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) 
      ) 
     } 

     override fun onStop() { 
      super.onStop() 
      unregisterReceiver(receiver = networkChangeReceiver) 
     } 
    } 

NetworkChangeReceiver.kt

class NetworkChangeReceiver : BroadcastReceiver() { 

    override fun onReceive(context: Context?, intent: Intent?) { 
      Log.e("network changed") 
    } 

} 

Ich sehe kein Problem darin. Aber mein Kotlin Plugin zeigt mir folgende Fehlermeldung:

Keine Folgende Funktionen können mit Argumenten geliefert

enter image description here

Die Argumente für erste geliefert aufgerufen werden korrekt ASAFIK. Ich bin kein Experte in Kotlin, ich lerne es nur zum Spaß. Ist das beabsichtigte Verhalten von Kotlin, Fehler im Plugin oder fehlt mir etwas? Kann mir jemand erklären?

Antwort

2

Zuerst heißt der Parameter filter und nicht intentFilter. Wenn Sie dies korrigieren, erhalten Sie einen weiteren Fehler. Was sagt: "Benannte Argumente sind nicht für Nicht-Kotlin-Funktionen zulässig" Grund dafür ist, dass die Methode public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) von Android stammt und in Java geschrieben ist. Entfernen der Namen sollte funktionieren:

registerReceiver(
      networkChangeReceiver, 
      IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) 
    ) 
Verwandte Themen