Xamarin Android & AIDL: Java.Lang.IllegalStateException: 'Bundle 的幻数错误
Xamarin Android & AIDL: Java.Lang.IllegalStateException: 'Bad magic number for Bundle
我正在使用 Xamarin Android 连接 Android 服务。在我为 .aidl 文件和 运行 项目自动生成存根后,我遇到了以下错误。
"Java.Lang.IllegalStateException: 'Bad magic number for Bundle"
我正在使用一个包含两个浮点值的 Parceable class。
public class TLGeoPoint : Java.Lang.Object, IParcelable
{
public float lat { get; set; }
public float lng { get; set; }
public TLGeoPoint()
{
}
public TLGeoPoint(Parcel parcel)
{
ReadFromParcel(parcel);
}
[ExportField("CREATOR")] // Need a reference to Mono.Android.Export
public static TLGeoPointCreator InitializeCreator()
{
return new TLGeoPointCreator();
}
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
{
dest.WriteFloat(lat);
dest.WriteFloat(lng);
}
public void ReadFromParcel(Parcel parcel)
{
lat = parcel.ReadFloat();
lng = parcel.ReadFloat();
}
}
public class TLGeoPointCreator : Java.Lang.Object, IParcelableCreator
{
public Java.Lang.Object CreateFromParcel(Parcel source)
{
TLGeoPoint objGeo = new TLGeoPoint();
objGeo.lat = source.ReadFloat();
objGeo.lng = source.ReadFloat();
return objGeo;
}
public Java.Lang.Object[] NewArray(int size)
{
return new Java.Lang.Object[size];
}
}
我想知道 Xamarin AIDL 代码生成中是否存在导致 Bag Magic Number 异常的错误,或者我缺少添加的内容。
请注意,该服务接受回调函数并通过该回调发送数据。我在调用回调之前收到此错误。
Xamarin AIDL 生成器中似乎存在错误。
同时,在 Xamarin 端解决该错误之前,您有多种选择。
- 移除生成的AIDL接口,移除你的*.aidl文件,手工编写IPC编组代码。哎呀
- 按照 this official tutorial 中的说明使用 Messenger + 捆绑包。每种方法都会有一些样板文件,但这种方法总体上是可用的。
- 或者将 IPC 代码移动到单独的 Java 库模块中。如果这样做,您应该能够使用官方 aidl 工具或通过其他方式(例如使用我自己为此目的编写的 library )生成 IPC 代理实现。
我正在使用 Xamarin Android 连接 Android 服务。在我为 .aidl 文件和 运行 项目自动生成存根后,我遇到了以下错误。
"Java.Lang.IllegalStateException: 'Bad magic number for Bundle"
我正在使用一个包含两个浮点值的 Parceable class。
public class TLGeoPoint : Java.Lang.Object, IParcelable
{
public float lat { get; set; }
public float lng { get; set; }
public TLGeoPoint()
{
}
public TLGeoPoint(Parcel parcel)
{
ReadFromParcel(parcel);
}
[ExportField("CREATOR")] // Need a reference to Mono.Android.Export
public static TLGeoPointCreator InitializeCreator()
{
return new TLGeoPointCreator();
}
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
{
dest.WriteFloat(lat);
dest.WriteFloat(lng);
}
public void ReadFromParcel(Parcel parcel)
{
lat = parcel.ReadFloat();
lng = parcel.ReadFloat();
}
}
public class TLGeoPointCreator : Java.Lang.Object, IParcelableCreator
{
public Java.Lang.Object CreateFromParcel(Parcel source)
{
TLGeoPoint objGeo = new TLGeoPoint();
objGeo.lat = source.ReadFloat();
objGeo.lng = source.ReadFloat();
return objGeo;
}
public Java.Lang.Object[] NewArray(int size)
{
return new Java.Lang.Object[size];
}
}
我想知道 Xamarin AIDL 代码生成中是否存在导致 Bag Magic Number 异常的错误,或者我缺少添加的内容。
请注意,该服务接受回调函数并通过该回调发送数据。我在调用回调之前收到此错误。
Xamarin AIDL 生成器中似乎存在错误。
同时,在 Xamarin 端解决该错误之前,您有多种选择。
- 移除生成的AIDL接口,移除你的*.aidl文件,手工编写IPC编组代码。哎呀
- 按照 this official tutorial 中的说明使用 Messenger + 捆绑包。每种方法都会有一些样板文件,但这种方法总体上是可用的。
- 或者将 IPC 代码移动到单独的 Java 库模块中。如果这样做,您应该能够使用官方 aidl 工具或通过其他方式(例如使用我自己为此目的编写的 library )生成 IPC 代理实现。