【问题标题】:Calling a method with multiple arguments in AAR from within Unity3D C# script从 Unity3D C# 脚本中调用具有多个参数的 AAR 方法
【发布时间】:2020-02-11 13:18:38
【问题描述】:

我有一个具有以下方法的类:

public static int add( int a, int b ){
    return a + b;
}

我正在尝试使用

从 Unity 脚本中调用它
var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int,int>( "add", new int[] { 1, 2 } );

但我明白了

AndroidJavaException: java.lang.NoSuchMethodError 在我的日志中。

怎么了?使用不带参数的方法,因此我们可以假设我正确设置了所有内容。

【问题讨论】:

  • 从我的脑海中浮现:泛型类型不是用来指定返回类型吗?不应该是简单的:ajc.CallStatic&lt;int&gt;( "add", new int[] { 1, 2 } );.
  • 不,一个模板参数没有返回类型。这里,第一个是返回类型,第二个是参数类型。
  • 那么它将与您的 add 方法的签名不匹配。无返回类型:CallStatic(String methodName, object[] args),返回类型:CallStatic&lt;returnType&gt;(String methodName, object[] args)
  • 为什么不匹配?它是RetType CallStatic&lt;RetType,T&gt;( string name, T[] args ),因此int CallStatic&lt;int,int&gt;( string name, int[] args ); -> 应该匹配我的Java 类,不是吗?
  • 不,因为它不是RetType CallStatic&lt;RetType,T&gt;( string name, T[] args )。但你得到了下面的答案:)

标签: java android unity3d aar


【解决方案1】:

而不是调用:

var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int,int>( "add", new int[] { 1, 2 } );

你应该实际使用:

var ajc = new AndroidJavaClass( "com.mil.rfcommunitylib.BluetoothClassic" );
int result = ajc.CallStatic<int>( "add", 1, 2 );

如果您仔细查看文档:link,您会看到在您的情况下,您的函数返回 int 所以它应该是 javaClass.CallStatic&lt;int&gt;(functionName, params ...) ,并且您将函数接受的参数作为单独的参数传递给函数,而不是相同参数类型的数组。

【讨论】:

  • 哦。不知道 C# 中的“params”关键字。说得通。我以为我必须传递一个数组。谢谢!
  • 我仍然不明白为什么我的代码不起作用,我只是注意到我使用的方法(指定返回和参数类型的方法)确实不要 使用params 关键字。预期用途是什么?根据错误消息,想要的签名是'([I)I',我想这意味着一个 int 数组参数。这个函数仅仅是为了传递数组吗?
  • 检查你的代码,你的返回类型是&lt;int, int&gt;。我什至对它编译感到惊讶......另一件事是阅读文档不会被args An array of parameters passed to the method.弄错这意味着您可以根据需要传递尽可能多的参数,而不是所有参数都应该放在一个数组中.
  • 我们谈论的是两种不同的方法。您所指的那个(一个模板参数)按照您发布的方式工作。我使用的那个(显然在 Unity 在线文档中找不到,带有 two 模板参数,第一个是返回类型,第二个是参数类型)没有。不过,仍然不确定如何使用它。也许它是为了传递数组。无论如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2014-09-17
  • 2013-10-17
相关资源
最近更新 更多