私は012NのでAndroidからC++を呼び出しています。今、私はそのC++関数をJavaからいくつかの機能を必要とし、C++からJavaにコールバックしようとします。私はstackoverflowとネット上の他のソース上の様々なソリューションをチェックしたが、何とかそれを働かせることができなかった。JNI経由でAndroidのC++からJava関数を呼び出す
私は常に次の例外が「W/dalvikvm(358): JNI WARNING: can't call Lcom/main/Main;.message on instance of Lcom/main/Main;
」
誰も私にこの上の任意のアドバイスを与えることができますか?何かを見逃したり、何かを監督したり、間違ったコードを書いたりしましたか?ここで
は、私はC++から呼び出すJavaの部分である:
public class Main extends Activity
{
public native String JNIInit();
String message(String text)
{ text = text + "from java";
return text;
}
.
.
}
これは私が成功し、Javaから呼び出すことができますが、私は戻ってJavaへ呼び出すことができないからC++の関数である:
をextern "C" JNIEXPORT jstring JNICALL Java_com_main_Main_JNIInit(JNIEnv* env, jobject obj)
{ jstring jstr = env->NewStringUTF("From jni");
jclass cls = env->FindClass("com/main/Main");
jmethodID method = env->GetMethodID(cls, "message", "(Ljava/lang/String;)Ljava/lang/String;");
jobject result = env->CallObjectMethod(obj, method, jstr);
return env->NewStringUTF(str);
}
PS:このトピックにはいくつかのスレッドがありますが、とにかくそれを動作させることはできませんでした。私が見逃しているものがなければなりません。私はそれが何であるか把握できません。
お持ちのメソッドシグネチャが正しいかどうかを確認しましたか?クラスにjavapを実行して、正しいかどうかを確認することができます。 – Pavan
OK、私はそれが正しいことを確認しました。 – Pavan