如何将对象从一个活动传递到android Kotlin中的另一个活动?

时间:2018-06-28 14:09:33

标签: android kotlin kotlin-android-extensions kotlin-extension

我是android kotlin的新手。我试图将对象从一个活动传递到另一个被卡住的活动

MyClass:

数据类MyPojo(值名称:字符串,值年龄:字符串):可序列化

FirstActivity:

MainActivity类:AppCompatActivity(){

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

    val editTextName = findViewById<EditText>(R.id.EditName)
    val editTextAge = findViewById<EditText>(R.id.EditAge)

    val button = findViewById<Button>(R.id.ButtonSend)

    button.setOnClickListener {

      val object1 = MyPojo(editTextName.text.toString(),editTextAge.text.toString())

        val intent = Intent(this,Main2Activity::class.java)
        intent.putExtra("Obj",object1)
        startActivity(intent)


    }

}

}

SecondActivity: Main2Activity类:AppCompatActivity(){

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

    val obj :MyPojo = intent.getSerializableExtra("obj") as MyPojo

    val textView : TextView = findViewById(R.id.textViewName)
    val textViewAge : TextView = findViewById(R.id.textViewAge)

    textView.setText(obj.name)
    textViewAge.setText(obj.age)

}

} 错误:

6-28 19:35:58.625 22192-22192 / com.example.evalai.passingobjecttoactivity E / AndroidRuntime:致命例外:main     流程:com.example.evalai.passingobjecttoactivity,PID:22192     java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.evalai.passingobjecttoactivity / com.example.evalai.passingobjecttoactivity.Main2Activity}:kotlin.TypeCastException:不能将null强制转换为非null类型com.example.evalai。传递对象到活动         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)         在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)         在android.app.ActivityThread.access $ 800(ActivityThread.java:156)         在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1351)         在android.os.Handler.dispatchMessage(Handler.java:102)         在android.os.Looper.loop(Looper.java:211)         在android.app.ActivityThread.main(ActivityThread.java:5371)         在java.lang.reflect.Method.invoke(本机方法)         在java.lang.reflect.Method.invoke(Method.java:372)         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:945)         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)      原因:kotlin.TypeCastException:无法将null强制转换为非null类型com.example.evalai.passingobjecttoactivity.MyPojo         在com.example.evalai.passingobjecttoactivity.Main2Activity.onCreate(Main2Activity.kt:14)         在android.app.Activity.performCreate(Activity.java:5990)         在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)

1 个答案:

答案 0 :(得分:1)

您提供的用于将pojo存储到Intent中的密钥与您用来读取它的密钥不同(您使用“ Obj”存储并使用“ obj”存储)。

当您在Main2Activity中读取意图时,该键没有存储任何内容,因此您返回null。而且,显然,您不能将MyPojo的值强制为null。

为避免这些问题,您应该始终为意图键声明一个常量:

const val ARG_POJO = "argPojo"

并使用它来存储和读取它们:

商店:

intent.putExtra(ARG_POJO, object1)

阅读:

val obj: MyPojo = intent.getSerializableExtra(ARG_POJO) as MyPojo