Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách truyền dữ liệu giữa các Activity bằng Serializable trong Android

Khi phát triển ứng dụng Android, việc truyền dữ liệu giữa các Activity là nhu cầu phổ biến. Serializable là một trong những cách đơn giản nhất để chuyển đối tượng qua Intent. Bài viết này hướng dẫn chi tiết cách triển khai Serializable để truyền object giữa hai Activity.

Serializable là gì?

Serializable là một interface đánh dấu (marker interface) trong Java. Khi một class implements Serializable, trạng thái của object có thể được chuyển đổi thành luồng byte (byte stream). Luồng byte này độc lập với nền tảng, do đó có thể hoạt động trên JVM và các nền tảng khác.

Các bước thực hiện

Bước 1: Tạo project mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết để tạo project.

Bước 2: Thiết kế layout activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <EditText
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Nhập tên"
            android:inputType="text" />

        <EditText
            android:id="@+id/phone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Nhập số điện thoại"
            android:inputType="number"/>

        <Button
            android:id="@+id/send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Gửi dữ liệu"/>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Bước 3: Tạo class model Userinfo implements Serializable

import java.io.Serializable;

public class Userinfo implements Serializable {
    private String name;
    private String phone;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getPhone() { return phone; }
    public void setPhone(String phone) { this.phone = phone; }
}

Bước 4: Xử lý MainActivity.java - Gửi dữ liệu

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private EditText name, phone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        name = findViewById(R.id.name);
        phone = findViewById(R.id.phone);
        Button send = findViewById(R.id.send);

        send.setOnClickListener(v -> {
            String userName = name.getText().toString().trim();
            String userPhone = phone.getText().toString().trim();

            if (TextUtils.isEmpty(userName) && TextUtils.isEmpty(userPhone)) {
                Toast.makeText(this, "Vui lòng nhập đầy đủ thông tin", Toast.LENGTH_LONG).show();
            } else {
                sendUserData(userName, userPhone);
            }
        });
    }

    private void sendUserData(String username, String userPhone) {
        Userinfo userinfo = new Userinfo();
        userinfo.setName(username);
        userinfo.setPhone(userPhone);

        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("user_data", userinfo);
        intent.putExtras(bundle);
        startActivity(intent);
    }
}

Bước 5: Xử lý SecondActivity.java - Nhận dữ liệu

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class SecondActivity extends AppCompatActivity {
    private TextView dataTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        dataTextView = findViewById(R.id.data);
        Userinfo userinfo = (Userinfo) getIntent().getSerializableExtra("user_data");

        if (userinfo != null) {
            String name = userinfo.getName();
            String phone = userinfo.getPhone();
            dataTextView.setText("Tên: " + name + "\nSố điện thoại: " + phone);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Giải phóng tham chiếu
    }
}

Chạy ứng dụng

Kết nối thiết bị Android thật hoặc sử dụng emulator. Nhấn Run trong Android Studio, chọn thiết bị và kiểm tra kết quả. Nhập tên, số điện thoại và nhấn "Gửi dữ liệu" để chuyển sang SecondActivity hiển thị thông tin vừa nhập.

Lưu ý quan trọng

  • Serializable dễ sử dụng nhưng hiệu suất kém hơn Parcelable do sử dụng reflection
  • Key truyền trong Bundle và lấy ra phải trùng khớp chính xác ("user_data")
  • Class model phải implements Serializable và có serialVersionUID (tùy chọn nhưng khuyến khích)