Your code is missing a parameter. Also, you're releasing the string before you even use it. Assigning it to result[i] just makes a shallow copy (copy of the pointer, not the contents). After releasing it, result[i] becomes invalid.
JNIEXPORT void JNICALL Java_com_qualcomm_QCARSamples_ImageTargets_GetTargetData_returnResult(JNIEnv *env, jobject obj, jobject stringArray)
{
int length = env->GetArrayLength(stringArray);
for (int i = 0; i < length; ++i)
{
jstring jstr = (jstring) env->GetObjectArrayElement(stringArray, i);
const char* cpp_string = env->GetStringUTFChars(jstr, 0);
std::cout<<cpp_string<<"\n";
env->ReleaseStringUTFChars(jstr, cpp_string);
env->DeleteLocalRef(jstr);
}
}
OR if you want to save the string then:
JNIEXPORT void JNICALL Java_com_qualcomm_QCARSamples_ImageTargets_GetTargetData_returnResult(JNIEnv *env, jobject obj, jobject stringArray)
{
int length = env->GetArrayLength(stringArray);
std::vector<std::string> array_of_str(length);
for (int i = 0; i < length; ++i)
{
jstring jstr = (jstring) env->GetObjectArrayElement(stringArray, i);
const char* cpp_string = env->GetStringUTFChars(jstr, 0);
array_of_str.emplace_back(cpp_string);
env->ReleaseStringUTFChars(jstr, cpp_string);
env->DeleteLocalRef(jstr);
}
}