2016-06-25 7 views
1

AARを使用してXamarinプロジェクトのAndroidバインディングライブラリを作成しました。XamarinのAndroidライブラリ用JavaをC#に移植

私は今、そのライブラリを実装しようとしています。ここで

は、ライブラリを使用してコードの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が取得され、バインディングライブラリ内でnullポインタ例外がスローされます。

これは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から継承しません。サポートされていません。

関連する問題