Код: Выделить всё
for (int i=0;iFindClass("ExternalInterface");
jmethodID ExternalInterfaceConstructor = env->GetMethodID(ExternalInterface,"", "()V");
jobject classifierObj = env->NewObject( ExternalInterface, ExternalInterfaceConstructor);
mainMethod = env->GetMethodID( ExternalInterface,
"InitiateRestApiCall",
"(Ljava/lang/String;[Ljava/lang/String;Ljava/util/HashMap;)LRestApiResult;");
jAppId=env->NewStringUTF(ApiId.c_str());
applicationArgs = env->NewObjectArray( 1, env->FindClass("java/lang/String"), NULL);
applicationArg0 = env->NewStringUTF("Test");
env->SetObjectArrayElement( applicationArgs, 0, applicationArg0);
outputObj = env->CallObjectMethod( classifierObj, mainMethod, jAppId, applicationArgs,stringMap);
env->DeleteLocalRef(jAppId);
env->DeleteLocalRef(applicationArg0);
env->DeleteLocalRef(applicationArgs);
env->DeleteLocalRef(ExternalInterface);
env->DeleteLocalRef(outputClass);
}
int CallExternalApi(
string ApiId,
map restApiArgs
)
{
JNIEnv* env;
if(env!=NULL)
{
env=create_vm();
}
invoke_class( env ,
ApiId,
restApiArgs
);
return 0;
}
Код: Выделить всё
R13=0x00007ffdf0ffdf70 is pointing into the stack for thread: 0x00000000020d8000
R14=0x0000000000000000 is an unknown value
R15=0x0000000000000000 is an unknown value
Stack: [0x00007ffdf0f01000,0x00007ffdf1001000], sp=0x00007ffdf0ffdcb0, free space=1011k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libJavaInterface.so+0x54d3] JNIEnv_::FindClass(char const*)+0x17
C [libJavaInterface.so+0x5230] invoke_class(JNIEnv_*, std::__cxx11::basic_string, std::map)+0x85
C [libJavaInterface.so+0x540c] CallExternalApi(std::__cxx11::basic_string, std::map
Подробнее здесь: [url]https://stackoverflow.com/questions/78487514/jni-c-program-crashes-when-call-made-to-rest-api-in-a-loop[/url]