我正在用JNI异步执行测试Rust。我想在Rust中执行请求,并用回调将结果异步返回到Android。我正在测试代码来执行命令行中的请求,它工作得很好。
这就是它在命令行上的工作方式:
struct Processor {
pub(crate) callback: Box<dyn FnMut(String)>,
}
impl Processor {
fn set_callback(&mut self, c: impl FnMut(String) + 'static) {
self.callback = Box::new(c);
}
fn process_events(&mut self, result: String) {
(self.callback)(result);
}
}
const DATA_URL: &str = "https://pokeapi.co/api/v2/pokemon/1/";
#[tokio::main]
pub async fn load_swapi_async_with_cb(callback: Box<dyn FnMut(String)>) -> Result<(), Box<dyn std::error::Error>> {
println!("load_swload_swapi_async_with_cbapi_async started");
let mut cb = Processor {
callback: Box::new(callback),
};
let body = reqwest::get(DATA_URL)
.await?
.json::<HashMap<String, String>>()
.await?;
//println!("{:#?}", body);
let name = match body.get("name") {
Some(name) => name,
None => "Failed to parse"
}.to_string();
println!("Name is: {} ", name);
cb.process_events(name);
Ok(())
}
#[no_mangle]
#[allow(non_snake_case)]
pub extern "C" fn Java_com_omg_app_greetings_MainActivity_callback(env: JNIEnv,
_class: JClass,
callback: JObject) {
static callback: dyn FnMut(String) + 'static = |name| {
let response = env.new_string(&name).expect("Couldn't create java string!");
env.call_method(callback, "rustCallbackResult", "(Ljava/lang/String;)V",
&[JValue::from(JObject::from(response))]).unwrap();
};
pokemon_api(callback);
}
#[no_mangle]
pub extern fn pokemon_api(callback: impl FnMut(String) + 'static) {
let cb_box = Box::new(callback);
swapi::load_swapi_async_with_cb(cb_box);
}
let response = env.new_string(&name).expect("Couldn't create java string!");
| ^^^ non-constant value
static callback: dyn FnMut(String) + 'static = |name| {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
我正在检查它是如何工作的,但示例似乎已经过时:*https://github.com/mozilla/rust-android-gradle/blob/master/samples/rust/src/lib.rs
我解决了https://github.com/dushistov/rust_swig的用法问题。集成它后,它将自动生成代码,您可以检查它是如何执行的。
我有以下问题:我试图从函数调用闭包,但是以后必须调用另一个函数。 我无法创建异步闭包,因为它们目前不稳定: 所以我得以某种方式这样做。 我发现了几个与该问题相关的问题,例如,但是当我试图实现它时,我收到了以下错误: 这里是游乐场链接,希望能显示我有什么问题。 我正在使用标题中所述的tokio。
问题内容: 作为开始使用Android的iOS开发人员,我遇到了Retrofit。我了解如何实现同步请求,但是在通过成功/失败回调实现异步请求时遇到了麻烦。具体来说,我不清楚Callback语法,在Retrofit 网站,介绍Retrofit 的Square 博客文章或我所见过的其他地方都没有具体的示例。有人可以在此发布一些示例代码吗?我在改造仓库中提出了一个问题,要求他们使用此信息更新自述文件。
作为一名开始使用Android的iOS开发者,我遇到了改型。我知道如何实现同步请求,但在使用成功/失败回调实现异步请求时遇到了问题。具体来说,回调语法对我来说并不清楚,在改型网站、介绍改型的方形博客帖子或我见过的其他地方,都没有具体的例子来说明如何做到这一点。有人能在这上面贴些示例代码吗?我在翻新回购中提出了一个问题,要求他们用这些信息更新自述文件。
我正在尝试创建一个回调函数: 首先,我创建了一个函数接口,用于定义回调函数的约定 我创建了一个类,该类将定义一个方法来调用我的回调(我通过使用lambda表达式传递了接口的实现作为对此方法的引用) 下面是我的代码: 但当我运行这段代码时,我得到了这样的结果。 有人能告诉我为什么我会有这个例外吗?
本文向大家介绍Android实现异步加载图片,包括了Android实现异步加载图片的使用技巧和注意事项,需要的朋友参考一下 麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的. 今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片都是使用了AsynTask这个AP
本文向大家介绍python使用multiprocessing模块实现带回调函数的异步调用方法,包括了python使用multiprocessing模块实现带回调函数的异步调用方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python使用multiprocessing模块实现带回调函数的异步调用方法。分享给大家供大家参考。具体分析如下: multipressing模块是python 2