使用Intent在不同app间传递对象

1. 使用serializable

对象实现parcelable接口,但是不能通过Intent在不同app(进程)间传递这个对象;
会报错:
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: cm.transobj.ObjPar
对象如果实现了serializable,可以这么做;当然进程间通信应该通过aidl;但既然可以,不妨试一试;

2.直接上代码

    public class ObjSer implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -336990741145778963L;

    private String mName;
    private int mId;

    public String getName(){
        return mName;
    }

    public void setName(String name){
        mName = name;
    }

    public int getId(){
        return mId;
    }

    public void setId(int id){
        mId = id;
    }
}

发送端代码:

    Intent intent = new Intent();
    intent.setClassName("yu.obj", "yu.obj.Main");
    ObjSer ser = new ObjSer();
    ser.setId(2);
    ser.setName("this is serialize");
    Bundle bundle = new Bundle();
    bundle.putSerializable(SERIALIZABLE_KEY, ser);
    intent.putExtras(bundle);
    startActivity(intent);

接收端:

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    if(null != bundle){
        ObjSer ser = (ObjSer)bundle.getSerializable("serial");
        if(null != ser){
            txtView.setText("serID:" + ser.getId() + "\n" +
                            "sername:" + ser.getName() + "\n");
        }
    }

这里有两点需要注意

  • 接收端需要相同的类ObjSer,并且serialVersionUID要相同;
  • 类的包名需要相同,把这个类做成jar包比较好;

上述两点如果不满足将会报错:
java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable object

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值