Serializable / Parcelable ব্যবহার করে অবজেক্ট পাস করুন
এই টিউটোরিয়ালে দেখানো হয়েছে কিভাবে একটি কাস্টম অবজেক্ট (Model Class) একটি এক্টিভিটি থেকে অন্য একটিতে Intent-এর মাধ্যমে পাস করা যায়।
ধাপ ১: প্রজেক্ট তৈরি
ধাপ ২: লেআউট (MainActivity)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click here to pass object to Second Activity!"
android:id="@+id/button"
android:layout_centerInParent="true" />
</RelativeLayout>
ধাপ ৩: মডেল ক্লাস (Serializable)
Character.java:
import java.io.Serializable;
public class Character implements Serializable {
String name, profession, position;
String[] abilities;
public Character(String name, String profession, String position, String[] abilities) {
this.name = name;
this.profession = profession;
this.position = position;
this.abilities = abilities;
}
}
ধাপ ৪: MainActivity.java (পাঠানো)
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(v -> {
Intent intent = new Intent(this, SecondActivity.class);
Character sports = new Character(
"CR7", "Football", "Left Winger",
new String[]{"Best Free kicker in the World"}
);
intent.putExtra("Character", sports);
startActivity(intent);
});
}
}
ধাপ ৫: SecondActivity.java (গ্রহণ)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Arrays;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Character sports = (Character) getIntent().getSerializableExtra("Character");
TextView textView = findViewById(R.id.textView);
textView.setText(sports.name + "\n" + sports.profession + "\n"
+ sports.position + "\n" + Arrays.toString(sports.abilities));
}
}
ধাপ ৬: SecondActivity লেআউট
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:textSize="20sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
Serializable vs Parcelable
| বিষয় | Serializable | Parcelable |
|---|---|---|
| সহজতা | খুব সহজ (implements Serializable) | কোড বেশি লাগে (writeToParcel, CREATOR) |
| পারফরম্যান্স | धीম (রিফ্লেকশন ব্যবহার) | তেজ (অ্যান্ড্রয়েডের জন্য অপ্টিমাইজড) |
| গারবেজ | অতিরিক্ত অবজেক্ট তৈরি করে | কম গারবেজ |
| সুপারিশ | সিম্পল ডেটা, দ্রুত প্রোটোটাইপ | প্রোডাকশন অ্যাপ, বড় ডেটা |
Parcelable উদাহরণ (Kotlin - অটো জেনারেট)
@Parcelize
data class Character(
val name: String,
val profession: String,
val position: String,
val abilities: Array
) : Parcelable
Java-এ Parcelable (ম্যানুয়াল)
public class Character implements Parcelable {
// ফিল্ড, কনস্ট্রাক্টর...
protected Character(Parcel in) {
name = in.readString();
profession = in.readString();
position = in.readString();
abilities = in.createStringArray();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(profession);
dest.writeString(position);
dest.writeStringArray(abilities);
}
public static final Creator CREATOR = new Creator() {
@Override public Character createFromParcel(Parcel in) { return new Character(in); }
@Override public Character[] newArray(int size) { return new Character[size]; }
};
@Override public int describeContents() { return 0; }
}
বড় ডেটার জন্য বিকল্প
- ViewModel / SharedViewModel - এক্টিভিটি/ফ্র্যাগমেন্টের মাঝপথে ডেটা শেয়ার
- Room Database - পার্সিস্টেন্ট স্টোরেজ
- DataStore / SharedPreferences - ছোট ডেটা
- Application ক্লাস - গ্লোবাল স্টেট (সতর্কতার সাথে)