【问题标题】:Xamarin Android & AIDL: Java.Lang.IllegalStateException: 'Bad magic number for BundleXamarin Android 和 AIDL:Java.Lang.IllegalStateException:'Bundle 的幻数错误
【发布时间】:2020-02-05 10:43:26
【问题描述】:

我正在使用 Xamarin Android 连接 Android 服务。在我为 .aidl 文件自动生成存根并运行项目后,我遇到了以下错误。

"Java.Lang.IllegalStateException: 'Bundle 的魔数错误"

我正在使用一个包含两个浮点值的 Parceable 类。

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 异常的错误,或者我缺少添加的内容。

请注意,服务接受回调函数并通过该回调发送数据。我在调用回调之前收到此错误。

【问题讨论】:

    标签: android xamarin aidl


    【解决方案1】:

    Xamarin AIDL 生成器中似乎存在错误。

    与此同时,在 Xamarin 解决错误之前,您有多种选择。

    1. 删除生成的 AIDL 接口,删除您的 *.aidl 文件,手动编写 IPC 编组代码。哦。
    2. 使用 Messenger + Bundle,如 this official tutorial 中所述。每种方法都会有一些样板,但这种方法总体上是可用的。
    3. 或者将 IPC 代码移动到单独的 Java 库模块。如果这样做,您应该能够使用官方 aidl 工具或其他方式(例如使用我为此目的编写的library)生成您的 IPC 代理实现。

    【讨论】:

    • 我猜这是几年前在 Stackoverflow 的另一篇文章中报道的。我不认为微软已经解决了这个问题。
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2015-06-28
    • 2017-12-14
    相关资源
    最近更新 更多