簡體   English   中英

將Java移植到Xamarin Android庫的C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM