java - 为 Xamarin Android 库将 Java 移植到 C#

标签 java c# android xamarin shared-libraries

我使用 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/

相关文章:

c# - Java - 通过 Web 服务和 XML 发送可能包含非法字符的 UTF-8 字符串

java - 为什么方法 'Arrays.asList()' 不接受类型为 {"",""} 的参数,但接受 ("","")?

c# - 实现通用工厂方法

android - 如何将参数传递给json?

android布局不显示

java - 如何从 Android 中的服务调用一个 Activity 的方法?

java - Ant : addTYPE(TYPE x) vs add(TYPE x) (latter doesn't work) 中的自定义任务

java - 为日期格式声明字符串常量,而不是显式地编写字符串值

c# - 如何通过 ADO.net 使用 Linq 访问 oracle 数据?

android - flutter 运行失败,错误为 "Could not resolve the package ' 中的 'package:characters/characters.dart' 个字符。”