lib.rs:
use jni_glue::Env;
use jni_android_sys;
#[no_mangle]
extern "C" fn for_example(env: Env) {
let jstr = jni_android_sys::java::lang::String::new(&env).unwrap(); /* fn new<'env>(
__jni_env: &'env Env
) -> Result<Local<'env, String>, Local<'env, Throwable>>
*/
let stfs = jni_android_sys::android::os::StatFs::new(&env, jstr).unwrap();
/* fn new<'env>(
__jni_env: &'env Env,
arg0: impl Into<Option<&'env String>>
) -> Result<Local<'env, StatFs>, Local<'env, Throwable>>
*/
}
我得到一个错误
error[E0277]: the trait bound `Option<&jni_android_sys::java::lang::String>: From<Local<'_, jni_android_sys::java::lang::String>>` is not satisfied
--> src/lib.rs:9:64
|
9 | let stfs = jni_android_sys::android::os::StatFs::new(&env, jstr).unwrap();
| ----------------------------------------- ^^^^ the trait `From<Local<'_, jni_android_sys::java::lang::String>>` is not implemented for `Option<&jni_android_sys::java::lang::String>`
理论上,我需要将Local<'env, String>
转换为&' env String
,但如何转换呢?这意味着什么?如何解决?
Local<'_, T>
实现Deref<Target = T>
。所以你应该能够像这样取消引用它:
StatFs::new(&env, &*jstr)