Android Kotlin-开始活动并从意图中获取数据

时间:2019-05-06 08:33:09

标签: android android-intent android-activity kotlin

我只想开始一个活动并将一些数据发送到第二个活动,这是我的代码:

主要活动:

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

catItem不为null,并且其中的每个项目都具有值,我已经调试了,并且对此很确定。

我需要获取数据的第二个活动:

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

它在第二行崩溃:

{{1}}

我调试了,捆绑包完全是空的。

此代码有什么问题?

5 个答案:

答案 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,但是由于某些原因,其属性(例如nameid可能为null。

在第二个活动中,您声明catId并且title是非空字符串类型。当它到达线时。

catId = bl.getString("catId")

因为bl.getString("catId")返回null,并且您将null值分配给非空变量(catId)。这就是应用抛出

的原因
  

java.lang.IllegalStateException:bl.getString(“ catId”)不能为   空

解决方案::如果您不确定catId属性(名称,id)始终接收非空值,请在第二个活动中将catIdtitle声明为可空字符串类型。

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()