String-Array von Java an C mit JNI übergeben

Lesezeit: 2 Minuten

Benutzeravatar von Masay
Massay

Ich habe ein String-Array wie {"myname","yourname","hisname"} und ich versuche, dieses Array zu senden C mit verwenden JNI. Ich konnte keine eindeutige Lösung dafür finden. Ich habe versucht, diese Zeichenfolge als eine zu nehmen chararray aber kein erfolg.

Gibt es eine Möglichkeit, dies zu tun?

Benutzeravatar von 8ball
8 Ball

Sie können eine einfache Funktion schreiben, die a akzeptiert jobjectArray Objekt, wandeln Sie jedes in jstring um und rufen Sie es dann auf GetStringUTFChars darauf.

So was:

void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {

    int stringCount = env->GetArrayLength(stringArray);

    for (int i=0; i<stringCount; i++) {
        jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
        const char *rawString = env->GetStringUTFChars(string, 0);
        // Don't forget to call `ReleaseStringUTFChars` when you're done.
    }
}

  • ist der jobject object Eingabe erforderlich?

    – Benutzer1893354

    12. September 2019 um 19:23 Uhr

  • Muss ich anrufen DeleteLocalRef auf das Temporäre jstring Objekt zurückgegeben von GetObjectArrayElement?

    – Violette Giraffe

    24. April 2020 um 17:37 Uhr


Ja, es gibt einen Weg. Sie würden die passieren String[] in Ihre native Methode von der Java-Seite und das würde auf der C/C++-Seite als jobjectArray. Sie würden dann verwenden GetObjectArrayElement() ein bekommen jstring bei einem bestimmten Index und dann verwenden GetStringUTFChars() oder GetStringChars() um einen C/C++-Zeiger auf die zugrunde liegenden Zeichenfolgendaten zu erhalten.

Und wenn Sie es nicht wissen, die JNI-Buch ist eine wertvolle Referenz.

  • thx als referenz. Ich lese es. Ich habe mein Problem mit dem Senden einer Zeichenfolge an die C-Seite gelöst. Ich habe versucht, ein Array zum Üben zu senden, und habe Erfolg. Thx für Hilfe. Es gibt zwei richtige Antworten und wenn es Ihnen nichts ausmacht, möchte ich 8ball einen Repräsentanten geben …

    – Massay

    13. Juni 2011 um 10:42 Uhr


  • Der Link zu “JNI Book” ist defekt.

    – Dr. Markus Weninger

    20. Dezember 2016 um 9:20 Uhr

Benutzeravatar von govind
Regierung

es kann auf folgende Weise erfolgen:

(JNIEnv *env, jobject object, jobjectArray prdctini)
    {
        const char *param[20];
        jsize stringCount = (*env).GetArrayLength(prdctini);

          for (int i=0; i<stringCount; i++) {
                  jstring string = (jstring) (*env).GetObjectArrayElement( prdctini, i);
                  param[i] = (*env).GetStringUTFChars( string, NULL);
          }
          cout<<"U_Id="<<param[0]<<endl;
          cout<<"aggregation="<<param[1]<<endl
}

  • Wie wäre es mit ReleaseStringUTFChars ?

    – Dmitri Zaytsev

    10. Juli 2014 um 10:01 Uhr

Denken Sie daran, zu verwenden

env->GetArrayLength(stringArray);

1386360cookie-checkString-Array von Java an C mit JNI übergeben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy