Получите дополнительную строку от активности Kotlin

Я хочу получить строку в другом упражнении с намерением. Это способ создать мое намерение

        val intent = Intent(this, Main2Activity::class.java)
        intent.putExtra("samplename", "abd")
        startActivity(intent)

Как я могу получить значение этого намерения в другом действии

Ответ 1

Ответ найден, в следующем действии вы должны сделать это, чтобы получить строку:

val ss:String = intent.getStringExtra("valor")

Ответ 2

НАГРУЗКИ

val value: String = txt_act_main.text.toString() // or just your string
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("value", value)
startActivity(intent)

//опция 2 все внутренние классы должны быть имплантированы в Serializable

   getIntent().putExtra("complexObject", clickedTitle);

ПОЛУЧИТЬ

var bundle :Bundle ?=intent.extras
var message = bundle!!.getString("value") // 1
var strUser: String = intent.getStringExtra("value") // 2
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

//вариант 2

 var myProg = intent.getSerializableExtra("complexObject") as MenuModel

IMPLICIT (Поделиться с другими приложениями)

val value: String = txt_act_main.text.toString()
var intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, value)
intent.type="text/plain"
startActivity(Intent.createChooser(intent,"Share to "))

Ответ 3

Вы можете проверить, является ли значение намерения нулевым или нет

val bundle :Bundle ?=intent.extras
    if (bundle!=null){
        val message = bundle.getString("object") // 1

        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

    }

Ответ 4

Может использовать этот код:

val bundle=intent.extras
val samplename:String
if(bundle!=null)
{
    samplename = bundle.getString("samplename")
}

Ответ 5

В Main2Activity вы можете иметь свой код следующим образом:

    val intent = getIntent();
    val myValue = intent.getStringExtra("key")
    Log.d(TAG,"myValue"+myValue)

Ответ 6

Принятый ответ не решает случай, когда намерения не существует. Потому что, когда ключ не существует в намерении, getStringExtra() даст вам null даже его подпись указывает на String а не на String? ,

Вы можете использовать val text:String = intent.getStringExtra(intentKey)?: "" Чтобы убедиться, что NPE не произошло.

Но еще один ответ здесь:

Это относится к случаю, когда вы пытаетесь получить строку из намерения, если значение есть, мы получаем значение, в противном случае оно вернется к предыдущему экрану, потому что это намерение имеет решающее значение. Произойдет что-то не так, но мы не хотим разрушать эту деятельность.

private fun getStringFromIntentOrShowError(intentKey: String):String {
    val text:String? = intent.getStringExtra(intentKey)

    if (text == null) {
        showDialog(
            "Error", 
            "No $intentKey found"
        ) {
            it.dismiss()
            finish()
        }
        return ""
    }

    return text
}

// I use anko to show a dialog, you can use your one.
private fun showDialog(
    title:String,
    message:String,
    yesButtonCallback: (d:DialogInterface) -> Unit
) {
    alert(message, title){ yesButton{
            yesButtonCallback(it)
    } }.show()
}

Затем вы можете использовать его следующим образом:

val text:String = getStringFromIntentOrShowError("asd")

и текст всегда будет иметь значение