Почему я получаю сообщение Invoke error: метод не найден - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь интегрировать в Delphi appsFlyer (android)

public abstract interface AppsFlyerConversionListener
{
  @WorkerThread
  public abstract void onInstallConversionDataLoaded(Map<String, String> paramMap);
  public abstract void onInstallConversionFailure(String paramString);
  @WorkerThread
  public abstract void onAppOpenAttribution(Map<String, String> paramMap);
  public abstract void onAttributionFailure(String paramString);
}

public class AppsFlyerLib implements a
{
   public static AppsFlyerLib getInstance() {...}
   public AppsFlyerLib init(String paramString, AppsFlyerConversionListener paramAppsFlyerConversionListener) {...}
   public AppsFlyerLib init(String paramString, AppsFlyerConversionListener paramAppsFlyerConversionListener, Context paramContext) {...}
}

поэтому я перевожу этот класс в Delphi следующим образом:

  {*******************************************************}
  JAppsFlyerConversionListenerClass = interface(IJavaClass)
    ['{FE22E5D8-EF6E-44DE-AE27-45C224FF4E06}']
  end;

  {**********************************************************}
  [JavaSignature('com/appsflyer/AppsFlyerConversionListener')]
  JAppsFlyerConversionListener = interface(IJavaInstance)
    ['{698F89B7-7DD7-4F32-B196-BEE4E16FBD36}']
    procedure onAppOpenAttribution(conversionData: JMap); cdecl;
    procedure onAttributionFailure(errorMessage: JString); cdecl;
    procedure onInstallConversionDataLoaded(conversionData: JMap); cdecl;
    procedure onInstallConversionFailure(errorMessage: JString); cdecl;
  end;
  TJAppsFlyerConversionListener = class(TJavaGenericImport<JAppsFlyerConversionListenerClass, JAppsFlyerConversionListener>) end;

  {****************************************}
  JAppsFlyerLibClass = interface(IJavaClass)
    ['{B2787D1A-BDFB-41A3-B876-05148C26FF3F}']
    {class} function getInstance: JAppsFlyerLib; cdecl;
  end;

  {*******************************************}
  [JavaSignature('com/appsflyer/AppsFlyerLib')]
  JAppsFlyerLib = interface(IJavaInstance)
    ['{F8676840-7A1B-4BA7-BFFD-362668E9927A}']
    function init(key: JString; conversionListener: JAppsFlyerConversionListener): JAppsFlyerLib; cdecl; overload;
    function init(key: JString; conversionListener: JAppsFlyerConversionListener; context: JContext): JAppsFlyerLib; cdecl; overload;
  end;
  TJAppsFlyerLib = class(TJavaGenericImport<JAppsFlyerLibClass, JAppsFlyerLib>) end;

и я реализую JAppsFlyerConversionListener следующим образом:

TAppsFlyerConversionListener= class(TJavaLocal, JAppsFlyerConversionListener)
  private
  public
    procedure onAppOpenAttribution(conversionData: JMap); cdecl;
    procedure onAttributionFailure(errorMessage: JString); cdecl;
    procedure onInstallConversionDataLoaded(conversionData: JMap); cdecl;
    procedure onInstallConversionFailure(errorMessage: JString); cdecl;
  end;

но теперь, когда я звоню:

FAppsFlyerConversionListener := TAppsFlyerConversionListener.create;
TJAppsFlyerLib.JavaClass.getInstance.init(StringToJstring('xxxxx'), FAppsFlyerConversionListener, TAndroidHelper.Context.getApplicationContext);

Я получаю:

Ошибка вызова: метод не найден

есть идеи, почему?

ПРИМЕЧАНИЕ : даже делая TJAppsFlyerLib.JavaClass.getInstance.init(nil, nil, nil) верните мне

Ошибка вызова: метод не найден

NOTE2 : Я не знаю, имеет ли это значение, но у нас также есть функция init in JObjectClass:

  JObjectClass = interface(IJavaClass)
    ['{83BD30EE-FE9B-470D-AD6C-23AEAABB7FFA}']
    {class} function init: JObject; cdecl;
  end;
...