は、これは私が文字列のためにそれを行う方法です。getApplicationJniMethodIdでどのようにintをパラメータとして送信できますか?
void SampleSwitchCamera(const char *name)
{
jboolean isAttached;
JNIEnv *env;
jmethodID mid;
jstring js;
LOGE("SampleSwitchCamera Begin");
env = getJniEnv(&isAttached);
if (env == NULL)
goto FAIL0;
mid = getApplicationJniMethodId(env, applicationJniObj, "cameraSwitchCallback", "(Ljava/lang/String;)V");
if (mid == NULL)
goto FAIL1;
js = (*env)->NewStringUTF(env, name);
(*env)->CallVoidMethod(env, applicationJniObj, mid, js);
if (isAttached)
{
(*global_vm)->DetachCurrentThread(global_vm);
}
LOGE("SampleSwitchCamera End");
return;
FAIL1:
if (isAttached)
{
(*global_vm)->DetachCurrentThread(global_vm);
}
FAIL0:
LOGE("SampleSwitchCamera FAILED");
return;
}
だから私はこのように試してみました:
void CallbackFromJni(const int *id)
{
jboolean isAttached;
JNIEnv *env;
jmethodID mid;
jstring js;
LOGE("callbackFromJni Begin %d", id);
env = getJniEnv(&isAttached);
if (env == NULL)
goto FAIL0;
mid = getApplicationJniMethodId(env, applicationJniObj, "callbackFromJni", "(Ljava/lang/Integer;)V");
if (mid == NULL)
goto FAIL1;
jintArray array = (*env)->NewIntArray(env, id);
(*env)->CallVoidMethod(env, applicationJniObj, mid, array);
if (isAttached)
{
(*global_vm)->DetachCurrentThread(global_vm);
}
LOGE("callbackFromJni End");
return;
FAIL1:
if (isAttached)
{
(*global_vm)->DetachCurrentThread(global_vm);
}
FAIL0:
LOGE("callbackFromJni FAILED");
return;
}
しかし、私はこのエラーを取得する:
01-26 11:17:36.654: E/VidyoMobile app/src/main/jni/ndkVidyoSample.c(22071): callbackFromJni Begin 101
01-26 11:17:36.655: E/art(22071): JNI ERROR (app bug): attempt to pass an instance of int[] as argument 1 to void com.vidyo.vidyocore.VidyoCoreApplication.callbackFromJni(java.lang.Integer)
01-26 11:17:36.692: A/art(22071): art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: bad arguments passed to void com.vidyo.vidyocore.VidyoCoreApplication.callbackFromJni(java.lang.Integer) (see above for details)
01-26 11:17:36.692: A/art(22071): art/runtime/java_vm_ext.cc:410] native: #09 pc 000024a9 /data/app/be.belfius.videocall-1/lib/arm/libndkVidyoSample.so (CallbackFromJni+104)
01-26 11:17:37.219: A/art(22071): art/runtime/runtime.cc:366] native: #12 pc 000024a9 /data/app/be.belfius.videocall-1/lib/arm/libndkVidyoSample.so (CallbackFromJni+104)
01-26 11:17:37.220: A/art(22071): art/runtime/runtime.cc:366] native: #14 pc 000024a9 /data/app/be.belfius.videocall-1/lib/arm/libndkVidyoSample.so (CallbackFromJni+104)
01-26 11:17:37.365: A/DEBUG(195): Abort message: 'art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: bad arguments passed to void com.vidyo.vidyocore.VidyoCoreApplication.callbackFromJni(java.lang.Integer) (see above for details)'
01-26 11:17:37.389: A/DEBUG(195): #14 pc 000024a9 /data/app/be.belfius.videocall-1/lib/arm/libndkVidyoSample.so (CallbackFromJni+104)
私は私が必要とする原因をasummingていますこれはintArrayを作成しています。何newIntがないので、どのように私は、int型を作成することができ、ちょうどnewIntArray
非常にうまく入れる:Dを、おかげで多くのことを。私はcallVoidMethod経由で送信するjava_intを作成する方法を理解していませんでしたが、あなたの説明は完璧で、私の問題を修正するために管理しました –
オブジェクトを作成するには、宛先クラス参照とコンストラクタ参照が必要です'NewObject(env、clazz_ref、constructor_ref、constructor_params ...)' –
私はIntArrayとStringを例にとっていましたが、newStringUTFを使って文字列を作成することができます。Integerは何か類似していて、 tクラス参照を送信する方法がわからない –