kotlin попробуй поймать блок с bundle.getString - PullRequest
0 голосов
/ 30 ноября 2018

У нас есть преднамеренные дополнения, которые передаются обратно в активностьКод написан на Kotlin 1.3 и размещен нижеМы не понимаем, почему код должен быть в блоке try catchНаш вопрос - есть ли лучший способ написания этого кода, и кто-то может объяснить, почему код требует блока try catch.Мы знаем, что это может быть написано когда.Переход обратно к этому действию выполняется с различными намерениями, которые не всегда помещают все значения, которые получает пакет.Одна кнопка использует этот код

    val intent = Intent(this,MainActivity::class.java)
    intent.putExtra("FROM", "NEW")
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
    startActivity(intent)

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

        holder.ivEdit.setOnClickListener {

        //val rowid = friendList.get(position).id
        val intent = Intent(context, MainActivity::class.java)
        intent.putExtra("FROM", "UPDATE")
        intent.putExtra("recordID", items.id)
        intent.putExtra("PERSON", items.person)
        intent.putExtra("PHONE", items.phone)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(intent)
    }

Вот код в Деятельности, который имеет код try catchКод находится внутри функции onCreate

        try {
        val bundle: Bundle = intent.extras
        from = bundle.getString("FROM","")
        txtPerson = bundle.getString("PERSON","")
        txtPhone = bundle.getString("PHONE","")

        if(from == "UPDATE") {
            showMSG("To CANCEL use back button")
            id = bundle.getInt("recordID", 4)
            btnAdd.visibility = View.INVISIBLE
            btnEdit.visibility = View.VISIBLE
            btnViewList.visibility = View.INVISIBLE
            etPerson.setText(txtPerson)
            etPhone.setText(txtPhone)

        }else if (from == "DELETE"){

            showMSG("To CANCEL use back button")
            btnAdd.visibility = View.INVISIBLE
            btnViewList.visibility = View.INVISIBLE
            btnEdit.visibility = View.INVISIBLE
            btnDelete.visibility = View.VISIBLE
            etPerson.setText(txtPerson)
            etPhone.setText(txtPhone)
            etPerson.isEnabled = false
            etPhone.isEnabled = false

        }else{

            btnViewList.visibility = View.VISIBLE
            btnAdd.visibility = View.VISIBLE
            btnEdit.visibility = View.INVISIBLE
        }
        if (id != 0) {
            //etPerson.setText(txtPerson)
            //etPhone.setText(txtPhone)
        }
    } catch (ex: Exception) {
    }

1 Ответ

0 голосов
/ 30 ноября 2018

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

intent.extras не должен быть нулевым , поэтому, если оно нулевое, вам нужен способ справиться с этим фактомЯ не вижу лучшего способа обойти проблему, чем блок try catchвозможно, кто-то может предложить другое решение.

...