ตัวอย่างนี้สาธิตวิธี ทำให้ 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 เลือกอุปกรณ์ แล้วตรวจสอบหน้าจอเริ่มต้น

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

คำอธิบาย 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