如何在 android Kotlin 中将对象从一个 activity 传递到另一个 activity?
how to pass object from one activity to another activity in android Kotlin?
我是 android Kotlin 的新手。我正在尝试将对象从一个 activity 传递到另一个 activity 我卡住了,
我的班级:
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: FATAL EXCEPTION: main
Process: com.example.evalai.passingobjecttoactivity, PID: 22192
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.evalai.passingobjecttoactivity/com.example.evalai.passingobjecttoactivity.Main2Activity}:
kotlin.TypeCastException: null cannot be cast to non-null type
com.example.evalai.passingobjecttoactivity.MyPojo
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
at android.app.ActivityThread.access0(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
Caused by: kotlin.TypeCastException: null cannot be cast to non-null type com.example.evalai.passingobjecttoactivity.MyPojo
at com.example.evalai.passingobjecttoactivity.Main2Activity.onCreate(Main2Activity.kt:14)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
您提供的用于将 pojo 存储到 Intent 中的密钥与您用于读取它的密钥不同(您使用 "Obj" 存储并使用 "obj" 读取)。
当您在 Main2Activity 中读取意图时,该键未存储任何内容,因此您 return null。而且,显然,您不能将 null 转换为 MyPojo。
为避免这些问题,您应该始终为意图的键声明一个常量:
const val ARG_POJO = "argPojo"
并用它来存储和读取它们:
商店:
intent.putExtra(ARG_POJO, object1)
阅读:
val obj: MyPojo = intent.getSerializableExtra(ARG_POJO) as MyPojo
第 1 步:使数据 class 可序列化
data class MyPojo(val name: String, val age: String) : Serializable
第 2 步:从发送开始 Activity
val object1 = MyPojo(editTextName.text.toString(),editTextAge.text.toString())
val intent = Intent(this,Main2Activity::class.java)
intent.putExtra("Obj",object1 as Serializable)
startActivity(intent)
第 3 步:接收时 activity
val receivedObject:MyPojo=intent?.getSerializableExtra(Obj) as MyPojo
就是这样。
我是 android Kotlin 的新手。我正在尝试将对象从一个 activity 传递到另一个 activity 我卡住了,
我的班级:
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: FATAL EXCEPTION: main Process: com.example.evalai.passingobjecttoactivity, PID: 22192 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.evalai.passingobjecttoactivity/com.example.evalai.passingobjecttoactivity.Main2Activity}: kotlin.TypeCastException: null cannot be cast to non-null type com.example.evalai.passingobjecttoactivity.MyPojo at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442) at android.app.ActivityThread.access0(ActivityThread.java:156) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5371) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740) Caused by: kotlin.TypeCastException: null cannot be cast to non-null type com.example.evalai.passingobjecttoactivity.MyPojo at com.example.evalai.passingobjecttoactivity.Main2Activity.onCreate(Main2Activity.kt:14) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
您提供的用于将 pojo 存储到 Intent 中的密钥与您用于读取它的密钥不同(您使用 "Obj" 存储并使用 "obj" 读取)。
当您在 Main2Activity 中读取意图时,该键未存储任何内容,因此您 return null。而且,显然,您不能将 null 转换为 MyPojo。
为避免这些问题,您应该始终为意图的键声明一个常量:
const val ARG_POJO = "argPojo"
并用它来存储和读取它们:
商店:
intent.putExtra(ARG_POJO, object1)
阅读:
val obj: MyPojo = intent.getSerializableExtra(ARG_POJO) as MyPojo
第 1 步:使数据 class 可序列化
data class MyPojo(val name: String, val age: String) : Serializable
第 2 步:从发送开始 Activity
val object1 = MyPojo(editTextName.text.toString(),editTextAge.text.toString())
val intent = Intent(this,Main2Activity::class.java)
intent.putExtra("Obj",object1 as Serializable)
startActivity(intent)
第 3 步:接收时 activity
val receivedObject:MyPojo=intent?.getSerializableExtra(Obj) as MyPojo
就是这样。