как передать объект из одного действия в другое действие в Android Kotlin? - PullRequest
0 голосов
/ 28 июня 2018

Я новичок в Android Kotlin. я пытаюсь передать объект из одного действия в другое, я застрял

MyClass:

класс данных MyPojo (имя Val: String, Val возраст: String): Сериализуемый

FirstActivity:

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)


    }

}

}

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: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: com.example.evalai.passingobjecttoactivity, PID: 22192 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.example.evalai.passingobjecttoactivity / com.example.evalai.passingobjecttoactivity.Main2Activity}: kotlin.TypeCastException: 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 в ненулевой тип 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) atroid.app.ActivityThread.performLaunchActivity (ActivityThread.java:2332)

1 Ответ

0 голосов
/ 28 июня 2018

Ключ, который вы предоставляете для хранения вашего pojo в Intent, - это не тот ключ, который вы используете для его чтения (вы сохраняете с помощью «Obj» и читаете с помощью «obj»).

Когда вы читаете намерение в своей функции Main2Activity, с этим ключом ничего не сохраняется, поэтому вы возвращаете ноль. И, очевидно, вы не можете разыграть ноль в MyPojo.

Чтобы избежать этих проблем, вы всегда должны объявлять константу для ключей ваших намерений:

const val ARG_POJO = "argPojo"

И используйте его для хранения и чтения с них:

Магазин:

intent.putExtra(ARG_POJO, object1)

Читать:

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