Vas*_*asu 6 android parcelable android-intent
我需要发送一些数据Activity,这些数据可能在不同的上下文中运行.为此,我创建了一个类A,它有一个ArrayList数据类型,说B作为实例成员之一.我将B类声明为A类的内部类.为了发送这个A类的实例Intent,我做了A类和B类Parcelable.
类结构是这样的(这不包括完整的代码,例如为编写类而编写的代码Parcelable):
public class A implements Parcelable{
public class B implements Parcelable{
public ArrayList<String> value;
....
....
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(value);
}
....
....
}
public List<B> group;
public String name;
....
....
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(group);
dest.writeString(name);
}
....
....
}
Run Code Online (Sandbox Code Playgroud)
我用这个putExtra (String name, Parcelable value)函数来放数据.
但在接收方,我得到以下例外:
Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 1087): 1289817569622 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SET_VOIP_SUPP_SERVICE_REQUEST_LOCAL (has extras) } in com.hsc.example.android.MyApp.MyAppActuvity$1@43b409b0
E/AndroidRuntime( 1087): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:765)
E/AndroidRuntime( 1087): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 1087): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1087): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1087): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 1087): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1087): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 1087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 1087): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1087): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@43b51240: Unmarshalling unknown type code 3211319 at offset 440
E/AndroidRuntime( 1087): at android.os.Parcel.readValue(Parcel.java:1777)
E/AndroidRuntime( 1087): at android.os.Parcel.readListInternal(Parcel.java:1956)
E/AndroidRuntime( 1087): at android.os.Parcel.readList(Parcel.java:1302)
E/AndroidRuntime( 1087): at com.hsc.example.android.MyApp.A.<init>(A.java:61)
E/AndroidRuntime( 1087): at com.hsc.example.android.MyApp.A.<init>(A.java:57)
E/AndroidRuntime( 1087): at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:67)
E/AndroidRuntime( 1087): at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:1)
E/AndroidRuntime( 1087): at android.os.Parcel.readParcelable(Parcel.java:1845)
E/AndroidRuntime( 1087): at android.os.Parcel.readValue(Parcel.java:1713)
E/AndroidRuntime( 1087): at android.os.Parcel.readMapInternal(Parcel.java:1947)
E/AndroidRuntime( 1087): at android.os.Bundle.unparcel(Bundle.java:169)
E/AndroidRuntime( 1087): at android.os.Bundle.getParcelable(Bundle.java:1037)
E/AndroidRuntime( 1087): at android.content.Intent.getParcelableExtra(Intent.java:3269)
E/AndroidRuntime( 1087): at com.hsc.example.android.MyApp.MyAppActuvity$1.onReceive(MyAppActuvity.java:219)
E/AndroidRuntime( 1087): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:754)
E/AndroidRuntime( 1087): ... 9 more
Run Code Online (Sandbox Code Playgroud)
然后我在类A之外移动了类B(因为我认为这可能是内部类的问题,并且声明CREATOR是静态的.当类B是类A的内部类时,这个静态声明不存在).但它没有帮助.
这似乎是这个问题是由于嵌套的Parceling.
有什么建议??
注意:当我使用android.os.Bundle.putParcelable(String key, Parcelable value)Bundle类的功能,然后使用它解组它android.os.Bundle.getParcelable(String key)然后一切都很好.所以似乎问题只与Intents有关.
您是否将 CREATOR 纳入其中?
public static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>() {
public A createFromParcel(Parcel in) {
return new A(in);
}
public A[] newArray(int size) {
return new A[size];
}
};
Run Code Online (Sandbox Code Playgroud)
& 接受 Parcel 的构造函数:
public A(Parcel parcel) {
name = parcel.readString();
//etc..
}
Run Code Online (Sandbox Code Playgroud)
?
| 归档时间: |
|
| 查看次数: |
5278 次 |
| 最近记录: |