我只想开始一个活动并将一些数据发送到第二个活动,这是我的代码:
主要活动:
val bl:Bundle=intent.extras
catId=bl.getString("catId")
title=bl.getString("title")
catItem不为null,并且其中的每个项目都具有值,我已经调试了,并且对此很确定。
我需要获取数据的第二个活动:
bl.getString("catId") must not be null
它在第二行崩溃:
{{1}}
我调试了,捆绑包完全是空的。
此代码有什么问题?
答案 0 :(得分:2)
要检索第二个活动的数据,您只需按以下方式直接访问intent的额外数据:
val catId = intent.getStringExtra("catId")
此外,请确保“ catId”类型为String(ID通常为Integer或Long),因为如果它不是String,则会出现相同的错误。
答案 1 :(得分:0)
将getExtra
更改为getStringExtra
bl.getStringExtra("catId")
答案 2 :(得分:0)
您在第二个活动中获取数据的代码是完全正确的。有一种可能的原因为什么它不起作用。
在主要活动中,catItem
变量不为null,但是由于某些原因,其属性(例如name
或id
可能为null。
在第二个活动中,您声明catId
并且title
是非空字符串类型。当它到达线时。
catId = bl.getString("catId")
因为bl.getString("catId")
返回null
,并且您将null
值分配给非空变量(catId
)。这就是应用抛出
java.lang.IllegalStateException:bl.getString(“ catId”)不能为 空
解决方案::如果您不确定catId属性(名称,id)始终接收非空值,请在第二个活动中将catId
和title
声明为可空字符串类型。
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")
}
}
}
答案 3 :(得分:0)
我认为您的代码中catItem.id为null,因为catId为null,这会导致崩溃。
请尝试以下代码来解决崩溃问题:
var bundle :Bundle ?=intent.extras
var title = bundle!!.getString("title")
var catId = bundle!!.getString("catId")
希望它对您有用。
答案 4 :(得分:0)
根据您的活动开始代码(只需复制代码):
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()