Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android Kotlin中,如何将对象从一个活动传递到另一个活动?_Android_Kotlin_Kotlin Android Extensions_Kotlin Extension - Fatal编程技术网

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

在android Kotlin中,如何将对象从一个活动传递到另一个活动?,android,kotlin,kotlin-android-extensions,kotlin-extension,Android,Kotlin,Kotlin Android Extensions,Kotlin Extension,我是android Kotlin的新手。我试图将对象从一个活动传递到另一个活动我被卡住了 MyClass: data class MyPojo(val name: String, val age: String) : Serializable 第一项活动: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(save

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

MyClass:

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-2819:35:58.625 22192-22192/com.example.evalai.passingobjecttoactivity E/AndroidRuntime:致命异常:主 进程:com.example.evalai.passingobjecttoactivity,PID:22192 java.lang.RuntimeException:无法启动活动组件信息{com.example.evalai.passingobjecttoactivity/com.example.evalai.passingobjecttoactivity.Main2Activity}: kotlin.TypeCastException:null不能转换为非null类型 com.example.evalai.passingobjecttoactivity.MyPojo 在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)上


为将pojo存储到Intent中而提供的密钥与用于读取pojo的密钥不同(您使用“Obj”存储,使用“Obj”读取)

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

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

const val ARG_POJO = "argPojo"
并使用它存储和读取:

商店:

intent.putExtra(ARG_POJO, object1)
阅读:


您在一个位置使用了
Obj
,在另一个位置使用了
Obj
-_-对非常感谢。
val obj: MyPojo = intent.getSerializableExtra(ARG_POJO) as MyPojo