Obtenir des chaînes utilisées en Java à partir de JNI

Code JAVA

Voici une partie de mon code que j’ai écrit en JAVA . Comme vous pouvez le voir, il s’agit d’une classe appelée JC_VerificationCandidate qui comporte deux membres Ssortingng , seedIndex et seedIndex .

 class JC_VerificationCandidate { public JCDSM_VerificationCandidate( Ssortingng enrollmentID, Ssortingng seedIndex ) { this.enrollmentID = enrollmentID; this.seedIndex = seedIndex; } public Ssortingng enrollmentID; public Ssortingng seedIndex; } 

Voici la classe principale où j’ai une méthode native et d’où j’ai appelé cette méthode native.

 public class DsmLibraryTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { JCDSM_VerificationCandidate verificationCandidate[] = {new JCDSM_VerificationCandidate( "tom", "anna" )}; dsm.JDSMVerify( 123456, "http:\\www.test_url.com", bytes, verificationCandidate ); } public native int JDSMVerify( int someValue1, Ssortingng someValue2, byte[] someValue3, JC_VerificationCandidate jVerificationCandList[] ); } 

Comme vous pouvez le voir, je crée un tableau avec un object et le donne à ma fonction.

 JCDSM_VerificationCandidate verificationCandidate[] = {new JCDSM_VerificationCandidate( "tom", "anna" )}; 

Code JNI

Comment puis-je obtenir ces deux chaînes eedIndex , eedIndex que j’ai définies à partir d’une application java et qui sont stockées dans jVerificationCandList ?

 JNIEXPORT jint JNICALL Java_com_Dsm_Test_DSM_JDSMVerify( JNIEnv* env, jobject thiz, jint jhDevice, jssortingng jurlID, jbyteArray jInputInfo, jobjectArray jVerificationCandList ) { } 

Le code suivant devrait vous permettre d’accéder au champ registrationmentID . Utilisez les fonctions JNI Ssortingng pour les lire / les manipuler.

 // Load the class jclass jclass_JCV = env->FindClass(env, "my.package.JC_VerificationCandidate"); jfieldID fid_enrollmentID = env->GetFieldID(env, jclass_JCV, "enrollmentID" , "Ljava/lang/Ssortingng;"); // Access the first element in the jVerificationCandList array jobject jc_v = env->GetObjectArrayElement(env, jVerificationCandList, 0); // get reference to the ssortingng jssortingng jstr = env->GetObjectField(env, jc_v, enrollmentID); // Convert jssortingng to native ssortingng const char *nativeSsortingng = (*env)->GetSsortingngUTFChars(env, jstr, 0);