Intent的extra里又放了自定义Parcelable的intent

Intent里嵌套放了intent且内层intent有自定义Parcelable对象时,会报错:

ClassNotFoundException when unmarshalling:  xxx.xxx.IPCData

例子:A和B Activity甚至不用在不同进程都一样有问题
A Activity

Intent intent = new Intent(this, B.class);

Intent innerIntent = new Intent();
innerIntent.putExtra("key1", "value1");
IPCData ipcData = new IPCData();
ipcData.data = "data";
innerIntent.putExtra("data", ipcData);

intent.putExtra("intent", innerIntent);
startActivity(intent);

B Activity:

Intent intent = getIntent();
Intent innerIntent = intent.getParcelableExtra("intent");
IPCData data = innerIntent.getParcelableExtra("data");//没有这一行,只有下面一行时也一样的效果
String key1 = innerIntent.getStringExtra("key1");

IPCData:

import android.os.Parcel;
import android.os.Parcelable;

public class IPCData implements Parcelable {

    public String data;

    public IPCData(){}

    protected IPCData(Parcel in) {
        data = in.readString();
    }

    public static final Creator<IPCData> CREATOR = new Creator<IPCData>() {
        @Override
        public IPCData createFromParcel(Parcel in) {
            return new IPCData(in);
        }

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

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(data);
    }
}

解决方案:
B Activity:

Intent intent = getIntent();
Intent innerIntent = intent.getParcelableExtra("intent");
innerIntent.setExtrasClassLoader(IPCData.class.getClassLoader());
IPCData data = innerIntent.getParcelableExtra("data");
String key1 = innerIntent.getStringExtra("key1");

网上已有讨论:https://issuetracker.google.com/issues/37053389

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java基础 什么是重载,什么是重写?有什么区别?重载(Overload):(1)Overloading是一个类中...
    勤息嘻嘻嘻阅读 3,831评论 0 1
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情况下的生命周期:在用户参与的情况下...
    AndroidMaster阅读 8,269评论 0 8
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 11,025评论 2 51
  • 我们所做的每一个决定,都必有一个动机。 一天的时间可能会做成百上千个决定,从早晨睁开眼睛的是否立马起床,到吃某样东...
    Sophie朵儿阅读 1,566评论 0 0
  • 灰姑娘的梦醒了,流淌着的泪水模糊了双眼,水晶鞋丢失了,公主的蓬蓬裙也不见了,那顶原本不属于自己的皇冠消失在了这片黑...
    琐珥阅读 4,446评论 0 2