【问题标题】:Getting null from intent从意图中获取 null
【发布时间】:2019-03-23 12:18:59
【问题描述】:

我正在尝试将两个字符串从 AddNote 传递到 MainActivity。但它一直为空。 无法启动活动(MainActivity)

java.lang.IllegalStateException: callingIntent.getStringExtra("intentTitle") must not be null  
class MainActivity : AppCompatActivity() {

    private val notes = arrayListOf<Note>()

    private val db by lazy {
        Room.databaseBuilder(this
            ,NoteDatabase::class.java
            ,"NoteDatabase.db")
        .allowMainThreadQueries()
            .build() }

    lateinit var adapter: adapter

    lateinit var title: String
    lateinit var content: String

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

        notes.addAll(db.dao().getNotes())

        AddNote.setOnClickListener {
            val i = Intent(this@MainActivity,AddNote::class.java)
            startActivity(i)
        }

        // startActivity(Intent(this, AddNote::class.java))

        val callingIntent = intent

        title = callingIntent.getStringExtra("intentTitle")
        content = callingIntent.getStringExtra("intentContent")

        val note = Note(title,content)

        val id = db.dao().insert(note)
        note.id = id.toInt()

        notes.add(note)

        adapter = adapter(notes, db)
        rootView.layoutManager = LinearLayoutManager(this)
        rootView.adapter = adapter
    }

    override fun onResume() {
        super.onResume()
        notes.clear()
        notes.addAll(db.dao().getNotes())
        adapter.notifyDataSetChanged()
    }
}


class AddNote : AppCompatActivity() {

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

        var intentTitle = "Title"
        var intentContent = "Content"

        saveNote.setOnClickListener {

            intentTitle = addTitle.text.toString()
            intentContent = addContent.text.toString()

        }

        val i = Intent()

            i.putExtra("title",intentTitle)
            i.putExtra("content",intentContent)

            startActivity(i)
    }
}

【问题讨论】:

  • getStringExtra 返回 null,但变量不为 null。不允许使用var title: String = null。另外,随机猜测:MainActivity 是启动器,也就是说它是最先启动的,也就是说 Intent 是空的。在分配之前检查它是否为空。

标签: android android-intent kotlin


【解决方案1】:

你必须像这样开始活动......

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", value)
startActivity(intent)

【讨论】:

    【解决方案2】:

    你必须把以MainActivity开头的代码放在saveNote.setOnClickListener里面:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.add_note)
    
        var intentTitle = "Title"
        var intentContent = "Content"
    
        saveNote.setOnClickListener {
            intentTitle = addTitle.text.toString()
            intentContent = addContent.text.toString()
            val i = Intent(this, MainActivity::class.java)
            i.putExtra("title",intentTitle)
            i.putExtra("content",intentContent)
            startActivity(i)
        }
    }
    

    您的代码的工作方式是在加载 AddNote 活动后立即启动 MainActivity,所以我不确定您要做什么。

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多