尝试访问其他活动时应用程序崩溃

主要活动:

val turminha : Turma = this.abrirArquivo() recycler_view.layoutManager = LinearLayoutManager(this) recycler_view.adapter = AlunoAdapter(this,turminha.alunos) floatingActionButton.setOnClickListener({ val i = Intent(this, ActivityAddAluno::class.java) i.putExtra("turma", turminha) startActivity(i) }) 

ActivityAddAluno

 class ActivityAddAluno : AppCompatActivity() { var i = getIntent() private var turma = i.getSerializableExtra("turma") as Turma override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_aluno) mBtnSalvarAluno.setOnClickListener{ var name = mEdtNomeAluno.text.toString() var matricula = mEdtMatriculaAluno.text.toString() toast("Nome: $name \n," + "Matricula: $matricula") turma.addAluno(Aluno(name, matricula)) } } 

Aluno类Aluno类:Serializable {

 var disciplinas: ArrayList<Disciplina>? = null private set var nome: String? = null var matricula: String? = null constructor() { disciplinas = ArrayList() } constructor(nome: String, matricula: String) { this.nome = nome this.matricula = matricula disciplinas = ArrayList() } 

类Turma

 class Turma() : Serializable { val alunos: ArrayList<Aluno> init { alunos = ArrayList() } fun addAluno(aluno: Aluno) { alunos.add(aluno) } 

当我尝试访问通过我的Turma对象在floatbutton中的其他活动时,应用程序停止工作。 Logcat说问题出在代码部分:

 var i = getIntent() private var turma = i.getSerializableExtra("turma") as Turma 

logcat的:

 FATAL EXCEPTION: main Process: com.example.thial.estudandokotlin, PID: 3428 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.thial.estudandokotlin/com.example.thial.estudandokotlin.ActivityAddAluno}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.content.Intent.getSerializableExtra(java.lang.String)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 

我该如何解决这个问题?

其实你的问题发生在这里根据你的日志猫消息。

 var i = getIntent() private var turma = i.getSerializableExtra("turma") as Turma 

这里的值“我”是空的,在它之上你尝试getSerializableExtra()字符串。

你在哪里调用ActivityAddAluno类的这一行? 它必须在onCreate函数内而不是在构造函数中。 (按照Joshua的说法)

  override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //... var i = getIntent() if(i!=null) { private var turma = i.getSerializableExtra("turma") as Turma } } 

下面是使用Kotlin进行数据切换的示例之一