Xamarin客户端应用程序与本机Android服务通信

时间:2015-05-27 08:08:17

标签: c# android xamarin client-server aidl

我目前正在开发一个Xamarin客户端应用程序,它通过AIDL与本机Android服务进行通信。

如果我的客户端从Android服务请求一组对象(实现Parcelable接口的自定义类),则通信正常。 但是,如果我的客户端从Android服务请求单个对象(同一个自定义类),则应用程序崩溃,并且#34; Java.Lang.IllegalStateException:Bundle exception的错误幻数“。

我附上了部分代码以供参考。

注意:使用本机Android客户端进行测试时,这两种调用类型都可以正常工作。

客户端 - 服务器接口声明

interface ITestService {

ABC getABCObject();
ABC[] getABCObjectArray();
}

ABC.java - (服务器端)

public static final Parcelable.Creator<ABC> CREATOR = new Parcelable.Creator<ABC>() {
@Override
public ABC createFromParcel(Parcel source) {
Log.i(TAG, "Inside createFromParcel");
return new ABC(source);
}

@Override
public ABC[] newArray(int size) {
Log.i(TAG, "Inside newArray");
return new ABC[size];
}
};

ABC.cs - (Xamarin客户端)

public static readonly GenericParcelableCreator<ABC> Creator = new GenericParcelableCreator<ABC>((parcel) => new ABC(parcel));

[ExportField("CREATOR")]
public static GenericParcelableCreator<ABC> GetCreator()
{
    Log.Debug (Tag, "GenericParcelableCreator ");
    return Creator;
}

public sealed class GenericParcelableCreator<T> : Java.Lang.Object, IParcelableCreator
    where T : Java.Lang.Object, new()
{
    public readonly Func<Parcel, T> _createFunc;
    public GenericParcelableCreator(Func<Parcel, T> createFromParcelFunc)
    {
        Log.Debug (Tag, "GenericParcelableCreator" );
        _createFunc = createFromParcelFunc;
    }

    #region IParcelableCreator Implementation

    public Java.Lang.Object CreateFromParcel(Parcel source)
    {
        Log.Debug (Tag, "CreateFromParcel" );
        return _createFunc(source);
    }

    public Java.Lang.Object[] NewArray(int size)
    {

        Log.Debug (Tag, "NewArray" );
        return new T[size];
    }

    #endregion
}

提前致谢。

0 个答案:

没有答案
相关问题