移植Java到c#的Xamarin Android库
本文关键字:Xamarin Android Java 移植 | 更新日期: 2023-09-27 17:49:23
我为我的Xamarin项目创建了一个Android绑定库,使用AAR。
我现在正在尝试实现这个库。
下面是使用库的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的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。不支持