繁体   English   中英

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

[英]how to pass object from one activity to another activity in android Kotlin?

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

我的课 :

data class MyPojo(val name: String, val age: String) : Serializable

第一活动:

class 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)
    }
  }
}

第二个活动:

class 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:致命异常:主进程:com.example.evalai.passingobjecttoactivity,PID:22192 java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.evalai.passingobjecttoactivity/com.example.evalai.passingobjecttoactivity.Main2Activity}: kotlin.TypeCastException: null 不能在 android.app.ActivityThread 转换为非空类型 com.example.evalai.passingobjecttoactivity.MyPojo。 performLaunchActivity(ActivityThread.java:2379) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) at android.app.ActivityThread.access$800(ActivityThread.java:156) at 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(Native Method) 在 java.lang.reflect.Method.invoke(Met hod.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740) 由:kotlin .TypeCastException: null 不能转换为非空类型 com.example.evalai.passingobjecttoactivity.MyPojo at com.example.evalai.passingobjecttoactivity.Main2Activity.onCreate(Main2Activity.kt:14) at android.app.Activity.performCreate(Activity) .java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)

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

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

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

const val ARG_POJO = "argPojo"

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

店铺:

intent.putExtra(ARG_POJO, object1)

读:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM