2016-06-25 93 views
1

我使用AAR爲Xamarin項目創建了一個Android綁定庫。將Java移植到C#for 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被初始化時,它得到句柄,然後在綁定庫中拋出一個空指針異常。

這是將Java接口移植到C#的正確方法嗎?

回答

2

如果您實施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繼承。它不受支持。