本文介绍了从JNI获取Java中使用的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我用 JAVA 编写的代码的一部分,如您所见,这是一个名为JC_VerificationCandidate的类,具有两个String成员enrollmentIDseedIndex.

Here is some part of my code that I have written in JAVA, As you can see this is a class called JC_VerificationCandidate that have two String members enrollmentID and seedIndex.

class JC_VerificationCandidate {

    public JCDSM_VerificationCandidate( String enrollmentID, String seedIndex ) {
        this.enrollmentID = enrollmentID;
        this.seedIndex    = seedIndex;
    }

    public String enrollmentID;
    public String seedIndex;
}

这是主类,在其中我有本机方法,并从那里调用了该本机方法.

Here is main class where I have native method and from where I called that native method.

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,
                   String                      someValue2,
                   byte[]                      someValue3,
                   JC_VerificationCandidate    jVerificationCandList[] );
}

如您所见,我用一个对象创建数组并将其提供给我的函数.

As you can see I create array with one object and give it to my function.

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

JNI代码

如何从Java应用程序中设置并存储在jVerificationCandList中的两个字符串enrollmentIDeedIndex?

JNI Code

How can I get that two strings enrollmentID, eedIndex that I have set from java application and which are stored in jVerificationCandList ?

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


}

推荐答案

以下代码应允许您访问字段 enrollmentID .使用 JNI字符串函数阅读/操作它们.

The following code should allow you to access the field enrollmentID. Use the JNI String functions to read/manipulate them.

// Load the class
jclass jclass_JCV = env->FindClass(env, "my.package.JC_VerificationCandidate");

jfieldID fid_enrollmentID = env->GetFieldID(env, jclass_JCV, "enrollmentID" , "Ljava/lang/String;");

// Access the first element in the jVerificationCandList array 
jobject jc_v = env->GetObjectArrayElement(env, jVerificationCandList, 0);

// get reference to the string 
jstring jstr = (jstring) env->GetObjectField(env, jc_v, enrollmentID);

// Convert jstring to native string
const char *nativeString = env->GetStringUTFChars(env, jstr, 0);

这篇关于从JNI获取Java中使用的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-14 23:48