Error de compilation de Kotlin en Android Studio en << intent.putExtra ("cadena", it.getString ("cadena") >>

No puedo entender qué pasa con el siguiente fragment de código. Me parece que getString necesariamente devuelve una cadena. ¡De hecho, funciona en las líneas de arriba! ¿Es esto un error?

fun loadExtraBundleIntoIntent(origIntent: Intent, resultIntent: Intent) { origIntent.extras?.let { if (it.getString("peerUid") != null) { resultIntent.putExtra("fragment", "ChatFragment") resultIntent.putExtra("peerUid", it.getString("peerUid")) } else if (it.getString("fragment") != null) { resultIntent.putExtra("fragment", it.getString("fragment")) } if (it.getString("action") != null) resultIntent.putExtra("action", it.getString("action")) } } 

Error en

 resultIntent.putExtra("fragment", it.getString("fragment")) 

Mensaje de error:

 Error:(80, 30) Overload resolution ambiguity: public open fun putExtra(p0: String!, p1: Bundle!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Parcelable!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Serializable!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Array<(out) Parcelable!>!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Array<(out) CharSequence!>!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Array<(out) String!>!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Boolean): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: BooleanArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Byte): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: ByteArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Char): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: CharArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: CharSequence!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Double): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: DoubleArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Float): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: FloatArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Int): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: IntArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Long): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: LongArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: Short): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: ShortArray!): Intent! defined in android.content.Intent public open fun putExtra(p0: String!, p1: String!): Intent! defined in android.content.Intent 

Captura de pantalla del error

Considera que el valor devuelto por it.getString ("fragment") es nulo y el valor nulo coincide con todas estas funciones putExtra .

eg: resultIntent.putExtra("fragment", null)

Bundle, Parcelable, Serializable, Parcelable, CharSequence, String, BooleanArray, ByteArray, CharArray, CharSequence, DoubleArray, FloatArray, IntArray, LongArray, ShortArray, String

todos estos parameters son objects y nulo se puede configurar en todos estos parameters: "Ambigüedad de resolución de sobrecarga. Todas estas funciones coinciden"

De alguna manera, el comstackdor está considerando que el valor "it" puede ser nulo después de 'else if' y esto no debería suceder porque es un tipo Bundle! no nulo. Creo que este es un error del comstackdor.

He probado con la siguiente versión de Kotlin para comstackr tu código:

  • 1.1.3 (lanzado el 23 de junio de 2017): error de compilation de kotlin.
  • 1.1.2 (lanzado el 25 de abril de 2017): error de compilation de kotlin.
  • 1.0.7 (lanzado el 15 de marzo de 2017): comstackr! ¡sin error!

Entonces, si usa la versión 1.0.7 , ¡funcionará! – Es difícil configurar esta versión en el estudio de Android. O puede usar otras opciones para forzar al comstackdor a evitar / corregir este problema, por ejemplo:

  • '!!' : it!!.getString("fragment")
  • lanzar a String : it.getString("fragment") as String
  • ?: "" : it.getString ("fragment")?: ""
  • etc …

Esto parece un error de compilation. Sin embargo, le sugiero que lo reescriba de forma que solo recupere cada valor del package, por lo que el comstackdor puede inferir que el segundo argumento putExtra () siempre es no nulo:

 fun loadExtraBundleIntoIntent(origIntent: Intent, resultIntent: Intent) { origIntent.extras?.let { val peerUid = it.getString("peerUid") if (peerUid != null) { resultIntent.putExtra("fragment", "ChatFragment") resultIntent.putExtra("peerUid", peerUid) } else it.getString("fragment")?.let { resultIntent.putExtra("fragment", it) } it.getString("action")?.let { resultIntent.putExtra("action", it) } } } 

Está poniendo múltiples extras con los mismos valores key. Aquí usa fragment como valor key aquí

  resultIntent.putExtra("fragment", "ChatFragment") 

y de nuevo aquí

 resultIntent.putExtra("fragment", it.getString("fragment")) 

Error tonto: no hay ninguna statement if { } else if { } en Kotlin! Solo existe if { } else { } .

Editar: estaba equivocado, hay un

de lo contrario si

en Kotlin.

No sé por qué no comstack.

  • Kotlin: método genérico y para bucle preguntando por iterador ()
  • Firebase-Firerestre no puede usar dos documentos
  • Kotlin: ¿cómo devolver la instancia del service en ejecución en la carpeta?
  • ¿Forma funcional de acumular dentro de una function de Unidad en Kotlin?
  • ¿Es posible utilizar println como reference de function en Kotlin?
  • ¿Cómo puedo depurar mi kotlin koan?
  • Kotlin: ¿Cómo se accede a los methods get y setValue de un delegado?
  • aplicación kotlin springboot - ¿por qué no funciona con cuerpo de expresión?
  • Error al ejecutar un proyecto de Android (escrito en Kotlin) comstackdo con el complemento Gradle2.0.0-alpha
  • Gson no puede analizar datos de formatting de cadena json en Kotlin
  • Las dependencies de Bintray no se downloadán en InteliJ