[英]Porting Java to C# for Xamarin Android Library
我使用AAR为Xamarin项目创建了Android绑定库。
我现在正在尝试实现该库。
这是使用该库的Java代码段:
Java代码:
new AsyncOperation.CompletionHandler<RouteManager>(){
@Override
public void success(RouteManager result){
result.subscribe(ACCEL_DATA, new RouteManager.MessageHandler(){
@Override
public void process(Message message){
Log.i(LOG_TAG,message)
}
}
}
我正在尝试将此代码移植到C#。
我的C#代码,来自从绑定库创建的C#包装器:
class AsyncOperationHandler : AsyncOperationCompletionHandler
{
public override unsafe void Success(Object p0)
{
try
{
var routeManger = (IRouteManager)p0;
routeManger.Subscribe(ACCEL_DATA, new RouteMessageHandler());
}
catch (Exception)
{
Log.Error(LOG_TAG, "Error");
}
}
}
class RouteMessageHandler : IRouteManagerMessageHandler
{
public void Dispose()
{
throw new NotImplementedException();
}
public IntPtr Handle { get; }
public void Process(Message p0)
{
var message = p0;
Log.Info(LOG_TAG, message);
}
}
我在routeManger.Subscribe行的C#包装程序中遇到错误。
当RouteManagerMessageHandler初始化后,它获取Handle,然后在绑定库中引发空指针异常。
这是将Java接口移植到C#的正确方法吗?
如果实现Java接口,则必须派生自Java.Lang.Object
。
class RouteMessageHandler : Java.Lang.Object, IRouteManagerMessageHandler
{
public void Process(Message p0)
{
var message = p0;
Log.Info(LOG_TAG, message);
}
}
编译输出上应该有东西。
类型“ AppXYZ.RouteMessageHandler”实现IRouteManagerMessageHandler,但不继承自Java.Lang.Object。 不支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.