Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีทำให้ Custom Object เป็น Serializable ใน Android

ตัวอย่างนี้สาธิตวิธี ทำให้ Custom Object เป็น Serializable ใน Android

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่ใน Android Studio

ไปที่ File → New Project และกรอกรายละเอียดที่จำเป็นทั้งหมด

ขั้นตอนที่ 2: เพิ่มโค้ดใน res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <Button
        android:id="@+id/parcleObject"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="27dp"
        android:text="Click here" />
</LinearLayout>

ใช้ Button เพื่อทริกเกอร์การสร้างและแสดง Serializable Object

ขั้นตอนที่ 3: เพิ่มโค้ดใน src/MainActivity.java

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    SerializableObject sample;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.parcleObject).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sample = new SerializableObject("Sairamkrishna Mammahe");
                Toast.makeText(MainActivity.this, sample.getName(), Toast.LENGTH_LONG).show();
            }
        });
    }
}

ขั้นตอนที่ 4: สร้าง SerializableObject.java

package com.example.myapplication;

import java.io.Serializable;

public class SerializableObject implements Serializable {
    // สำคัญ: serialVersionUID สำหรับ Version Control
    private static final long serialVersionUID = 1L;
    
    private String name;

    public SerializableObject(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

การทดสอบแอปพลิเคชัน

รันแอปพลิเคชันบนอุปกรณ์ Android จริง ใน Android Studio คลิกไอคอน Run เลือกอุปกรณ์ แล้วตรวจสอบหน้าจอเริ่มต้น

วิธีทำให้ Custom Object เป็น Serializable ใน Android

คลิกปุ่ม จะสร้าง Object และแสดงชื่อผ่าน Toast

วิธีทำให้ Custom Object เป็น Serializable ใน Android

คำอธิบาย Serializable

  • implements Serializable - Marker Interface ไม่มีเมธอดต้อง Implement
  • serialVersionUID - แนะนำให้ประกาศเอง เพื่อควบคุม Versioning (ถ้าไม่ใส่ Java จะสร้างอัตโนมัติจากโครงสร้าง Class)
  • transient - Field ที่ไม่ต้องการ Serialize (เช่น Password, Thread, Context)
  • การ Serialize/Deserialize ใช้ ObjectOutputStream / ObjectInputStream

ตัวอย่างการ Serialize/Deserialize จริง

// Serialize ไปไฟล์
try (FileOutputStream fos = new FileOutputStream("object.ser");
     ObjectOutputStream oos = new ObjectOutputStream(fos)) {
    oos.writeObject(sample);
}

// Deserialize จากไฟล์
SerializableObject restored;
try (FileInputStream fis = new FileInputStream("object.ser");
     ObjectInputStream ois = new ObjectInputStream(fis)) {
    restored = (SerializableObject) ois.readObject();
}

ข้อควรระวัง

⚠️ Serializable ใน Android:
  • ช้ากว่า Parcelable มาก (ใช้ Reflection)
  • สร้าง Temporary Objects เยอะ กดดัน GC
  • ไม่แนะนำ สำหรับ Intent/Bundle ระหว่าง Activity/Fragment
  • ใช้ได้สำหรับ: บันทึกไฟล์, ส่งข้าม Network, IPC ระหว่าง Process ต่างกัน

Best Practice: ใช้ Parcelable หรือ @Parcelize (Kotlin)

ดูรายละเอียดในบทความ: วิธีทำให้ Custom Object เป็น Parcelable