Получить строки, используемые в Java от JNI - PullRequest
3 голосов
/ 14 июня 2011

JAVA-код

Вот часть моего кода, который я написал в 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" )};

Код JNI

Как я могу получить две строки enrollmentID, eedIndex, которые я установил из Java-приложения и которые хранятся в jVerificationCandList?

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


}

1 Ответ

7 голосов
/ 14 июня 2011

Следующий код должен позволить вам получить доступ к полю enrollmentID . Используйте функции 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 = env->GetObjectField(env, jc_v, enrollmentID);

// Convert jstring to native string
const char *nativeString = (*env)->GetStringUTFChars(env, jstr, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...