Android Kotlin - начать деятельность и получать данные от намерения - PullRequest
0 голосов
/ 06 мая 2019

Я хочу просто начать занятие и отправить некоторые данные на второе занятие, это мой код:

Активный основной:

 val intent = Intent(this@MainActivity, Cards::class.java)
            intent.putExtra("title", catItem.name)
            intent.putExtra("catId", catItem.id)
            startActivity(intent)

catItem не является нулевым, и каждый элемент в нем имеет значение, я отлажен, и я уверен в этом.

второе действие, которое мне нужно для получения данных:

 val bl:Bundle=intent.extras
    catId=bl.getString("catId")
    title=bl.getString("title")

вылетает во второй строке:

 bl.getString("catId") must not be null

Я отладил, и пакет полностью пуст.

что не так с этим кодом?

Ответы [ 5 ]

2 голосов
/ 06 мая 2019

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

val catId = intent.getStringExtra("catId")

Кроме того, убедитесь, что тип "catId" имеет тип String (идентификатор обычно является целым или длинным), потому что если это не строка, вы получите ту же ошибку.

0 голосов
/ 04 июня 2019

В зависимости от начального кода вашей активности (просто копия вашего кода):

val intent = Intent(this@MainActivity, Cards::class.java)
            intent.putExtra("title", catItem.name)
            intent.putExtra("catId", catItem.id)
            startActivity(intent)

Работа с картами onCreate Метод:

, если они

Требуется:

val arguments = requireNotNull(intent?.extras){"There should be parameters or your more meaningful message."} 

with(arguments){
          catId = getString("catId")
          title = getString("title")
         }

Не требуется:

catId = intent?.extras?.getString("catId").orEmpty()
title= intent?.extras?.getString("title").orEmpty()

или

catId = intent?.extras?.getString("catId","default Cat").orEmpty()
title= intent?.extras?.getString("title","default Title").orEmpty()
0 голосов
/ 04 июня 2019

Я думаю, что в вашем коде catItem.id имеет значение null, из-за этого catId имеет значение null, что приводит к сбою.

Пожалуйста, попробуйте следующий код, чтобы преодолеть сбой:

var bundle :Bundle ?=intent.extras
var title = bundle!!.getString("title")
var catId = bundle!!.getString("catId")

Я надеюсь, что это сработает для вас.

0 голосов
/ 06 мая 2019

Ваш код во втором упражнении для получения данных полностью верен. Возможен сценарий, почему он не сработал.

В основном действии переменная catItem не равна нулю, но по некоторым причинам ее свойства, такие как name или id, могут быть равны нулю.

Во втором упражнении вы объявляете catId, а title - ненулевой тип String. Когда он достигает линии.

catId = bl.getString("catId")

потому что bl.getString("catId") возвращает null, и вы присваиваете значение null непустой переменной (catId). Вот почему приложение выбрасывает

java.lang.IllegalStateException: bl.getString ("catId") не должно быть нуль

Решение: Если вы не уверены, что свойства catId (name, id) всегда получают ненулевое значение, тогда объявите catId и title во втором действии как обнуляемый тип String.

class Cards : AppCompatActivity() {
    private var catId: String? = null
    private var title: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        catId = intent.extras?.getString("catId")
        title = intent.extras?.getString("title")

        catId?.let {
            // catId is not null 
            Log.i("TAG", "catId = $it")
        }
        title?.let {
            // title is not null 
            Log.i("TAG", "title = $it")
        }
    }
}
0 голосов
/ 06 мая 2019

Изменить getExtra на getStringExtra

bl.getStringExtra("catId")
...