From 7ffd8ac5f2a425561edfd3ac5e320e5a5690ad5d Mon Sep 17 00:00:00 2001 From: ehlxr Date: Fri, 25 Feb 2022 10:30:10 +0800 Subject: [PATCH] update at 2022-02-25 10:30:10 by ehlxr --- java_src/me/ehlxr/HelloWorld.java | 8 +++++++ mylib/src/lib.rs | 36 +++++++++++++++---------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/java_src/me/ehlxr/HelloWorld.java b/java_src/me/ehlxr/HelloWorld.java index cf6d3ad..8d73d47 100644 --- a/java_src/me/ehlxr/HelloWorld.java +++ b/java_src/me/ehlxr/HelloWorld.java @@ -2,6 +2,7 @@ package me.ehlxr; import java.util.List; import java.util.ArrayList; import java.util.Map; +import java.util.HashMap; class HelloWorld { static { @@ -56,11 +57,18 @@ class HelloWorld { ls.add("ls1"); ls.add("ls2"); ls.add("ls3"); + + Map map = new HashMap<>(); + map.put("k1", 1L); + map.put("k2", 2L); + map.put("k3", 3L); + HelloWorld hw = new HelloWorld(); hw.setName("Jack"); hw.no = 123434555L; hw.age = 30; hw.ls = ls; + hw.map = map; System.out.println(HelloWorld.getFiled(hw)); } diff --git a/mylib/src/lib.rs b/mylib/src/lib.rs index 7ba2255..258b4d3 100644 --- a/mylib/src/lib.rs +++ b/mylib/src/lib.rs @@ -1,7 +1,6 @@ -use jni::objects::{GlobalRef, JClass, JList, JObject, JString, JValue}; +use jni::objects::{GlobalRef, JClass, JObject, JString, JValue}; use jni::sys::{jbyteArray, jint, jlong, jstring}; use jni::JNIEnv; -use std::slice::SliceIndex; use std::{sync::mpsc, thread, time::Duration}; #[no_mangle] @@ -16,14 +15,14 @@ pub extern "system" fn Java_me_ehlxr_HelloWorld_getFiled( .l() .unwrap(); let jmap = env.get_map(map).unwrap(); - // jmp.get(slice) + jmap.iter().unwrap().into_iter().for_each(|jmap_iter| { let key: JString = jmap_iter.0.into(); - let value: JString = jmap_iter.1.into(); + let value = jmap_iter.1; println!( "get map key: {}, value: {}", String::from(env.get_string(key).unwrap()), - String::from(env.get_string(value).unwrap()) + long_value(env, value) ); }); @@ -60,19 +59,13 @@ pub extern "system" fn Java_me_ehlxr_HelloWorld_getFiled( // let no = env.get_field(input, "no", "J").unwrap().j().unwrap(); // println!("get no field: {}", no); - let no = env - .call_method( - env.get_field(input, "no", "Ljava/lang/Long;") - .unwrap() - .l() - .unwrap(), - "longValue", - "()J", - &[], - ) - .unwrap() - .j() - .unwrap(); + let no = long_value( + env, + env.get_field(input, "no", "Ljava/lang/Long;") + .unwrap() + .l() + .unwrap(), + ); println!("get no field: {}", no); let out_str = if let JValue::Object(result) = env @@ -221,6 +214,13 @@ pub extern "system" fn Java_me_ehlxr_HelloWorld_asyncComputation( rx.recv().unwrap(); } +fn long_value(env: JNIEnv, jobj: JObject) -> i64 { + env.call_method(jobj, "longValue", "()J", &[]) + .unwrap() + .j() + .unwrap() +} + #[cfg(test)] mod tests { #[test]