我目前正在开发一个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
}
提前致谢。