我正在编写一个本地插件,在某些情况下,它必须调用应用程序Flutter部分中的函数,用Dart编写。它是如何实现的,在这里解释:https://flutter.io/platform-channels/
此外,从本机/平台部分向Dart/非本机调用方法的示例如下:https://github.com/flutter/plugins/tree/master/packages/quick_actions
现在,如果平台只需要调用方法
,即调用不返回任何内容/void
,那么这个示例非常好,但是如果它需要调用函数
,即需要非本机/Dart部分的返回值,我在互联网上找不到示例或文档。但我相信它是可以实现的,因为在原生Java部分,有一种方法:
public void invokeMethod(String method, Object arguments, MethodChannel.Result callback)
所以,有一个回调
对象可能有来自非本机部分的返回值——或者,我错了,目前没有办法从应用程序的非本机Dart部分返回值?
签名是ululsetmetodCallHandler(未来
然后实现处理程序。这一个处理两个方法
foo
和bar
分别返回String
和Double
。
Future<dynamic> myUtilsHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'foo':
return 'some string';
case 'bar':
return 123.0;
default:
throw MissingPluginException('notImplemented');
}
}
在Java端,返回值被传递给
Result
回调的success
方法。
channel.invokeMethod("foo", arguments, new Result() {
@Override
public void success(Object o) {
// this will be called with o = "some string"
}
@Override
public void error(String s, String s1, Object o) {}
@Override
public void notImplemented() {}
});
在Swift中,返回值是
Any
传递给
结果
闭包。(未实现由常量NSObject
值notimplemented
的任何参数发出信号)
channel.invokeMethod("foo", arguments: args, result: {(r:Any?) -> () in
// this will be called with r = "some string" (or FlutterMethodNotImplemented)
})
我正在开发一个原生插件,并试图进行单元测试。所有单元测试都将在Dart中完成(无本机代码)。 Flutter有一个测试示例,说明如何使用测试从Dart到本机的调用方法通道。 问题是,我还没有找到测试从本机调用Dart的方法通道的方法,该Dart使用<code>setMethodCallHandler</code>来处理本机调用。 下面是一个示例
问题内容: 我想运行我的Java应用程序,并且在给定的工作量下能够看到: 给定函数被调用了多少次 每个函数调用相对而言的成本(即每个函数执行需要多长时间) 我大致知道瓶颈在我的应用程序中的哪个位置,但是我需要更细粒度的视图才能缩小范围。 谢谢 编辑 jvisualvm就像该工具一样-它在大约30秒内发现了问题。我只需要了解方法概要文件中的“自用时间”是什么意思。谢谢 问题答案: 从Sun在Java
我有这个getData通用网络调用,它有一个完成处理程序: 这是对该方法的调用: 我不想在router.getData()中有一个完成处理程序,因为我想使用委托来通知我的控制器数据的下载状态。 因此,我使用了相同的方法(getData),但没有完成处理程序,签名如下: 唯一的区别是,现在可以在没有任何完成处理程序块的情况下进行调用,所以现在理想情况下,我应该能够像这样调用它: 但是我有一个错误:
我需要一个简单的Java服务,它在系统启动时启动,并使用共享库与一些使用POSIX线程的功能。在实现JNI接口时,我遇到了一个问题,它不允许我从本地代码调用Java方法。GetMethodID()返回not NULL,所以我认为它做得很好。也没有任何可疑的错误可以帮助。所以我在log中添加了很多输出,并为此准备了一个简单的java测试。(下面列出了所有代码,但是project也可以在github的
问题内容: 尝试在Parent类中创建1个接口和2个具体类。这将使封闭类成为内部类。 现在,我真的不确定如何在静态main()方法中创建C类的对象并调用C类的call()方法。现在我遇到了问题: 问题答案: 这里的内部类不是静态的,因此您需要创建一个外部类的实例,然后调用new, 但是在这种情况下,您可以将内部类设为静态, 那就可以使用了