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

回答:

这是我用

编写的代码的一部分,如您所见,这是一个JC_VerificationCandidate有两个String成员enrollmentID和的类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[] );

}

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

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

回答:

JNIEXPORT jint JNICALL Java_com_Dsm_Test_DSM_JDSMVerify( JNIEnv* env, jobject thiz, jint jhDevice, jstring jurlID,

jbyteArray jInputInfo, jobjectArray jVerificationCandList ) {

}

回答:

以下代码应允许您访问字段 。使用JNI

String函数来读取/操作它们。

// 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中使用的字符串 的全部内容, 来源链接: utcz.com/qa/419517.html

回到顶部