why i am getting this error while using extraput func in Android Studio-Kotlin

Viewed 22

enter image description here

getting this as an error->

None of the following functions can be called with the arguments supplied:
public open fun putExtra(name: String!, value: Bundle?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Parcelable?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Serializable?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Array<(out) Parcelable!>?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Array<(out) CharSequence!>?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Array<(out) String!>?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Boolean): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: BooleanArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Byte): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: ByteArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Char): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: CharArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: CharSequence?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Double): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: DoubleArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Float): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: FloatArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Int): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: IntArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Long): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: LongArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: Short): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: ShortArray?): Intent defined in android.content.Intent
public open fun putExtra(name: String!, value: String?): Intent defined in android.content.Intent
1 Answers

If I understand well from your screenshot, I guess that your Customer class uses some custom wrapper classes for primitives.

Available data types for Intent::putExtra serialization is long. You have to convert/extract your data into those types.

It is a common practice to wrap primitives according to business requirements.

For example,

  • any string can not be AccNo. It should match the pattern ...
  • any string can not be email. It should contain at least @
  • any int can not be used for human age. It should be between 0 .. 150?

Check this example.

Text can hold only not blank strings

@JvmInline
value class Text(val text: String) {
  init { require(text.isNotBlank()) }
}
// customer name should not be blank
class Customer(val name: Text)

val customer = Customer(Text("kotlin"))

val intent = Intent(this@Customers, CustomerDetails::class.java)

// not ok, Text is not known for serialization
// customer.name is Text
intent.putExtra("customer_name", customer.name)

// ok. customer.name.text is String
intent.putExtra("customer_name", customer.name.text)

Hope this helps.

Related