You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何将Testendride对象传递到另一个Activity?

如何在Android中传递自定义对象到另一个Activity

你当前的代码存在两个核心问题:一是误用了putExtras方法(它接收的是Bundle而非单个对象),二是自定义类Testendride没有实现Android支持的序列化接口,导致无法通过Intent传递。下面给你三种可行的解决方案,按推荐程度排序:

方法一:使用Parcelable(Android官方推荐,效率最高)

Parcelable是Android专门设计的序列化方式,比Java原生的Serializable效率高很多,适合绝大多数场景。

步骤1:让Testendride实现Parcelable接口

需要实现接口的方法,并创建对应的CREATOR,注意读写数据的顺序必须完全一致:

public class Testendride implements Parcelable {
    // 你的成员变量
    public Testendride guranteBoneses;
    // 其他自定义字段...

    public Testendride() {}

    // 从Parcel中读取数据的构造方法
    protected Testendride(Parcel in) {
        // 读取顺序要和writeToParcel中的写入顺序完全匹配
        guranteBoneses = in.readParcelable(Testendride.class.getClassLoader());
        // 如果有其他字段,比如String name,就写name = in.readString();
    }

    // 必须实现的CREATOR静态常量
    public static final Creator<Testendride> CREATOR = new Creator<Testendride>() {
        @Override
        public Testendride createFromParcel(Parcel in) {
            return new Testendride(in);
        }

        @Override
        public Testendride[] newArray(int size) {
            return new Testendride[size];
        }
    };

    @Override
    public int describeContents() {
        return 0; // 一般返回0即可,除非包含特殊对象(如FileDescriptor)
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // 按顺序写入所有成员变量
        dest.writeParcelable(guranteBoneses, flags);
        // 其他字段比如dest.writeString(name);
    }
}

注意:如果你的类中有其他自定义对象成员,那这个成员类也必须实现Parcelable;如果是集合(比如List),要用dest.writeList()和in.readList()来处理。

步骤2:传递对象到目标Activity

修正你的Intent代码,使用putExtra而非putExtras:

Intent intent = new Intent(ActivityGuaranteeBonesesOffers.this, ActivityDetailGaurantee.class);
intent.putExtra("key_gurantee", guranteBoneses); // 自定义一个键名,后续接收要对应
startActivity(intent);

步骤3:在目标Activity中接收对象

// Android 12及以下
Testendride receivedObject = getIntent().getParcelableExtra("key_gurantee");

// Android 13及以上,建议指定类类型以避免警告
Testendride receivedObject = getIntent().getParcelableExtra("key_gurantee", Testendride.class);

方法二:使用Serializable(最简单,代码量最少)

这是Java原生的序列化方式,实现起来非常简单,适合结构简单的对象。

步骤1:让Testendride实现Serializable接口

只需要加一个接口声明即可,不需要重写方法:

public class Testendride implements Serializable {
    // 你的成员变量
    public Testendride guranteBoneses;
    // 其他字段...

    // 注意:如果有自定义对象成员,该成员类也必须实现Serializable
}

步骤2:传递对象

Intent intent = new Intent(ActivityGuaranteeBonesesOffers.this, ActivityDetailGaurantee.class);
intent.putExtra("key_gurantee", guranteBoneses);
startActivity(intent);

步骤3:接收对象

Testendride receivedObject = (Testendride) getIntent().getSerializableExtra("key_gurantee");

方法三:转成JSON字符串传递(无需修改实体类)

既然你已经在用Gson处理JSON,也可以把对象重新转成JSON字符串传递,这种方式不需要修改Testendride类,适合复杂嵌套的对象。

步骤1:传递JSON字符串

Gson gson = new Gson();
String objectJson = gson.toJson(guranteBoneses);

Intent intent = new Intent(ActivityGuaranteeBonesesOffers.this, ActivityDetailGaurantee.class);
intent.putExtra("key_gurantee_json", objectJson);
startActivity(intent);

步骤2:接收并还原对象

String jsonStr = getIntent().getStringExtra("key_gurantee_json");
Gson gson = new Gson();
Testendride receivedObject = gson.fromJson(jsonStr, Testendride.class);

最后纠正你原代码的错误

  • intent.putExtras("key", guranteBoneses); 是错误用法:putExtras接收的是Bundle对象,而不是单个键值对,正确的是用putExtra。
  • intent.putExtra("gurantee","gurantee"); 这段代码是多余的,如果你不需要传递这个字符串,可以直接删除。

内容的提问来源于stack exchange,提问作者Anaya Adana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:05:04