Предупреждения вызваны тем, что Kotlin имеет встроенную нулевую безопасность , что означает, что тип String сам по себе не является нулевым, однако некоторые метонды могут возвращать пустую строку типа String ?. Поэтому вам нужно предоставить альтернативное значение или значение по умолчанию на случай, если вы получите пустую строку.
data.getStringExtra("Name")?:"default value"
это называется оператором elvis, вы должны сделать это как для n, так и для p переменных, так как getStringExtra может вернутьпустая строка
Более того, я думаю, что вы не переопределяете правильный метод получения данных обратно к исходному действию. Пожалуйста, попробуйте
override fun onActivityResult(requestCode:Int, resultCode:Int, data:Intent?)
вместо
fun onActivity(requestCode: Int, resultCode: Int, data: Intent)
Стоит обратить внимание на данные
: Намерение?
вкл. метод, который я советую вам использовать. Это также означает, что Намерение может быть нулевым, но если вы прочитаете нулевую безопасность Это научит, как справиться с этим, тем временем вы можете использовать что-то вроде
data?.let{ d -> //do stuff here inside }
, выполнив этоубедитесь, что данные не равны NULL и что они были переименованы в d, поэтому в фигурных скобках используются как обычно, но вместо этого вызовите
d.getStringExtra("Name")
.
И последнее, но не выводитДругая вещь, которая доставляет вам неприятности, - это попытаться использовать справочник по Avtivity
this
до того, как метод onCreate будет завершен, как уже указала Су-Хан Хан. Я бы посоветовал вам использовать ленивую инициализацию в вашем коде, как этот
val contactAdapter = by lazy{ DSArrayAdapter(this, R.layout.activity_listview, listContacts)}
, что означает, что contactAdapter не будет создан сразу же, когда потребуется время, или вы можете инициализировать внутри onCreate, если захотите.
Надеюсь, это поможет:)