我使用 AAR 为我的 Xamarin 项目创建了一个 Android 绑定(bind)库。
我现在正在尝试实现该库。
这是使用该库的 Java 代码 fragment :
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# 代码,来自从绑定(bind)库创建的 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,然后在 Binding Library 中抛出空指针异常。
这是将 Java 接口(interface)移植到 C# 的正确方法吗?
最佳答案
如果您实现 Java 接口(interface),则必须从 Java.Lang.Object
派生。
class RouteMessageHandler : Java.Lang.Object, IRouteManagerMessageHandler
{
public void Process(Message p0)
{
var message = p0;
Log.Info(LOG_TAG, message);
}
}
编译输出应该有一些东西。
Type 'AppXYZ.RouteMessageHandler' implements IRouteManagerMessageHandler but does not inherit from Java.Lang.Object. It is not supported.
关于java - 为 Xamarin Android 库将 Java 移植到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38026194/