callMethodSync method

dynamic callMethodSync(
  1. String methodName,
  2. String returnType, {
  3. List? args,
  4. List<String>? assignedSignature,
})

Sync call java native method, you can use JObjectSyncCallMethod extension method which is more simplify.

returnType java method return type, same as JNI signature. If java method return int, return type is 'I'. Full jni signature below here. Java type | Signature int | I byte | B char | C short | S long | J boolean | Z float | F double | D void | V class | L + classname + ; String | Ljava/lang/String; (class example) array | [type int[] | [I (int example) String[] | [Ljava/lang/String; (class example)

Dart basic type not equal as java basic type, such as dart not contain byte, short, long, float. But the parameter list need same as java method parameter list. If java method parameter list contain like byte, short, you need use wrapper class is dart. See float, byte, short, jchar, long. For example java method: void test(int i, byte b, short s, long l, char c, float f); dart: invoke('test', 'V', args: i, byte(b), short(s), long(l), jchar(c), float(f)); also you can write: invokeVoid('test', args: i, byte(b), short(s), long(l), jchar(c), float(f));

Besides if your arguments type need to be assigned, use assignedSignature. For example In java ArrayList: boolean add(Object object); dart: JObject(className: 'java/util/ArrayList').invokeBool('add', args: JInteger(10), assignedSignature: 'Ljava/lang/Object;')

Implementation

dynamic callMethodSync(String methodName, String returnType,
    {List? args, List<String>? assignedSignature}) {
  return invokeSync(_ptr.cast<Void>(), methodName, returnType,
      args: args, assignedSignature: assignedSignature);
}