Что может быть самым простым способом добавить несколько JString в JNI? - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над приложением android, где мне нужно добавить 5-6 jstring и хочу вернуть одну jstring в нативном коде. Строки похожи на ...

jstring1= "Hello, "
jstring2= "How"
jstring3= "are"
jstring4= "you"
jstring5= "today?"

, и я хочу вернуть jstring, типа "Привет, как ты сегодня?" Я просто хочу узнать, как проще всего это сделать.

1 Ответ

0 голосов
/ 22 апреля 2020

Сначала вы создаете StringBuilder:

jclass cls_StringBuilder = env->FindClass("java/lang/StringBuilder");
jmethodID ctr_StringBuilder = env->GetMethodID(cls_StringBuilder, "<init>", "(I)V");
jobject stringBuilder = env->NewObject(cls_StringBuilder, ctr_StringBuilder, 100);

А затем добавляете строку за строкой:

jmethodID mid_StringBuilder_append = env->GetMethodID(cls_StringBuilder, "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
for (auto str: { jstring1, jstring2, jstring3, jstring4, jstring5 }) {
  env->CallObjectMethod(stringBuilder, mid_StringBuilder_append, str);
}

Наконец захватываете содержимое StringBuilder:

jmethodID mid_StringBuilder_toString = env->GetMethodID(cls_StringBuilder, "toString", "()Ljava/lang/String;");
jstring final = (jstring) env->CallObjectMethod(stringBuilder, mid_StringBuilder_toString);
return final;
...