如何在不同的APK(不同的包名称)中解组Parcelable对象?

时间:2016-03-28 14:35:39

标签: android parcelable

我有一个类 RegistrationRequest ,它实现 Parcelable ,如下所示:

package org.esec.mcg.androidu2f.client.msg;

public final class RegistrationRequest extends BaseRequest implements Parcelable {

public RegistrationRequest(byte[] applicationSha256, byte[] challengeSha256) {
    super(challengeSha256, applicationSha256);
}

private RegistrationRequest(Parcel source) {
    challengeSha256 = source.createByteArray();
    applicationSha256 = source.createByteArray();
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeByteArray(challengeSha256);

    dest.writeByteArray(applicationSha256);
}

public static final ClassLoaderCreator<RegistrationRequest> CREATOR = new ClassLoaderCreator<RegistrationRequest>() {
    @Override
    public RegistrationRequest createFromParcel(Parcel source, ClassLoader loader) {
        return new RegistrationRequest(source);
    }

    @Override
    public RegistrationRequest createFromParcel(Parcel source) {
        return createFromParcel(source, null);
    }

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

applicationSha256&amp; challengeSha256 BaseRequest 中的两个字节数组。 我将 RegistrationRequest 的对象放在一个包中:

Bundle data = new Bundle();
data.putParcelable("registerRequest", registrationRequest);

并将数据放入意图中。然后使用StartActivityWithResult()传递此意图。

最后,我将在另一个包含不同包名的APK中收到此Bundle:package org.esec.mcg.androidu2fsimulator.token;。在此APK中, RegistrationRequest 的包名称为package org.esec.mcg.androidu2fsimulator.token.msg;

所以,当我取消它的时候:

Bundle data = new Bundle();
data.getParcelable("registerRequest");

我收到以下错误:

  

引起:android.os.BadParcelableException:ClassNotFoundException   当解组时:   org.esec.mcg.androidu2f.client.msg.RegistrationRequest

我注意到Parcelable接口中有ClassLoaderCreator。 我试过Bundle的setClassLoader(RegistrationRequest.class.getClassLoader())。但问题仍然存在。

更新我已尝试在setClassLoader(RegistrationRequest.class.getClassLoader())之前致电data.getParcelable()。但问题仍然存在。

0 个答案:

没有答案