Android put and get可包裹数组错误
我试图将可包裹数组从MainActivity传输到SecondActivity,但遇到了一些奇怪的问题。Android put and get可包裹数组错误,android,android-intent,parcelable,Android,Android Intent,Parcelable,我试图将可包裹数组从MainActivity传输到SecondActivity,但遇到了一些奇怪的问题。 定义的包裹类别I如下所述: public class Person implements Parcelable { public int id; public String name; public byte[] key; public Person() {} public Person(int id_, String name_, byte[]
定义的包裹类别I如下所述:
public class Person implements Parcelable {
public int id;
public String name;
public byte[] key;
public Person() {}
public Person(int id_, String name_, byte[] key_) {
id = id_;
name = name_;
key = key_;
}
private Person(Parcel in) {
id = in.readInt();
name = in.readString();
int kl = in.readInt();
if (kl > 0) {
key = new byte[kl];
in.readByteArray(key);
}
}
public static Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
return new Person(source);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
if (key != null) {
dest.writeInt(key.length);
dest.writeByteArray(key);
} else {
dest.writeInt(0);
}
}
}
在第二个活动中,我得到了person和persons数组:
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("p", mPerson); // pay attention to this
bundle.putParcelableArray("persons", mPersons);
intent.putExtras(bundle);
startActivity(intent);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
mPerson = bundle.getParcelable("p");
Parcelable[] ps = bundle.getParcelableArray("persons");
到目前为止还不错。[但是!!]当我按以下方式编码时:
在主要活动中
Intent intent = new Intent(this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("person", mPerson); // code changed here
bundle.putParcelableArray("persons", mPersons);
intent.putExtras(bundle);
startActivity(intent);
在第二次活动中
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
mPerson = bundle.getParcelable("person"); // problem happened here
Parcelable[] ps = bundle.getParcelableArray("persons");
我遇到运行时异常,程序崩溃:
06-09 13:52:01.458: E/AndroidRuntime(27761): FATAL EXCEPTION: main
06-09 13:52:01.458: E/AndroidRuntime(27761): Process: com.example.parceabletest, PID: 27761
06-09 13:52:01.458: E/AndroidRuntime(27761): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.parceabletest/com.example.parceabletest.SecondActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@44b7ed40: Unmarshalling unknown type code 6619248 at offset 140
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2248)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2298)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread.access$800(ActivityThread.java:144)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Handler.dispatchMessage(Handler.java:102)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Looper.loop(Looper.java:212)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread.main(ActivityThread.java:5151)
06-09 13:52:01.458: E/AndroidRuntime(27761): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 13:52:01.458: E/AndroidRuntime(27761): at java.lang.reflect.Method.invoke(Method.java:515)
06-09 13:52:01.458: E/AndroidRuntime(27761): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-09 13:52:01.458: E/AndroidRuntime(27761): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
06-09 13:52:01.458: E/AndroidRuntime(27761): at dalvik.system.NativeStart.main(Native Method)
06-09 13:52:01.458: E/AndroidRuntime(27761): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@44b7ed40: Unmarshalling unknown type code 6619248 at offset 140
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Parcel.readValue(Parcel.java:2112)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Parcel.readArrayMapInternal(Parcel.java:2346)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Bundle.unparcel(Bundle.java:249)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.os.Bundle.getParcelable(Bundle.java:1206)
06-09 13:52:01.458: E/AndroidRuntime(27761): at com.example.parceabletest.SecondActivity.onCreate(SecondActivity.java:27)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.Activity.performCreate(Activity.java:5231)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-09 13:52:01.458: E/AndroidRuntime(27761): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
06-09 13:52:01.458: E/AndroidRuntime(27761): ... 11 more
我真的不知道为什么。。。我刚把钥匙从“p”改成“person”,坏事情就发生了 不要使用
ParcelableArray
,它实际上并不能满足您的需要。使用writeTypedArray
和readTypedArray
方法
查看我的答案,了解更多有关如何操作的信息。尝试以下方法:
if(getIntent().getExtras() != null)
{
}
可能是您的MainActivity没有第一次获取意图数据。检查是否在清单文件的应用程序标记中添加活动标记。 像
<activity
android:name=".MainActivity"
android:label="@string/app_name" >