从JNI获取Java中使用的字符串

时间:2011-06-14 12:27:54

标签: java android c java-native-interface

JAVA代码

以下是我在 JAVA 中编写的代码的一部分,正如您所看到的,这是一个名为JC_VerificationCandidate的类,其中有两个{{ 1}}成员StringenrollmentID

seedIndex

这是主要的类,我有本机方法,从那里我称之为本机方法。

class JC_VerificationCandidate {

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

    public String enrollmentID;
    public String seedIndex;
}

正如你所看到的,我创建了一个带有一个对象的数组并将它赋予我的函数。

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[] );
}

JNI代码

如何获取我从java应用程序设置的两个字符串JCDSM_VerificationCandidate verificationCandidate[] = {new JCDSM_VerificationCandidate( "tom", "anna" )}; enrollmentID以及哪些字符串存储在eedIndex < /强>

jVerificationCandList

1 个答案:

答案 0 :(得分:7)

以下代码应允许您访问 enrollmentID 字段。使用JNI String functions来阅读/操作它们。

// 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 = env->GetObjectField(env, jc_v, enrollmentID);

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