从意图中获取null

问题描述 投票:0回答:2

我试图从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)
    }
}
android android-intent kotlin
2个回答
0
投票

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

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

0
投票

你必须把启动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,因此我不确定您要执行的操作。

© www.soinside.com 2019 - 2024. All rights reserved.