Вызов метода Java содержит строку в качестве аргумента и строку в качестве возвращаемого типа из C ++ в ndk в Android - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть один из следующих методов в java:

public native String jniStringMethod();

public String stringMethod(String s) {
  Log.d("Testing", "String:" + s);
  return s;
}

Я пытаюсь вызвать метод "stringMethod" в jniStringMethod() в файле cpp следующим образом:

jstring Java_ashok_learning_ndk_SampleNDKActivity_jniStringMethod(JNIEnv *env,
  jobject obj) {
   jstring jstr = env->NewStringUTF("This comes from jni string .");

  //jclass clazz = env->GetObjectClass(obj);
   jclass clazz = env->FindClass("ashok/learning/ndk/SampleNDKActivity");
  if (0 == clazz) {
    LOG("clazz class not found!");
  }

  jmethodID messageMe = env->GetMethodID(clazz, "stringMethod", "(Ljava/lang/String;)Ljava/lang/String;");

  if (0 == messageMe) {
    LOG("messageMe method not found!");
  }
  jobject result = env->CallObjectMethod(obj, messageMe, jstr);
  LOG("result: %d", result);

  const char* str = env->GetStringUTFChars((jstring)result, NULL); // should be released but what a heck, it's a tutorial :)
  printf("%s\n", str);

  return env->NewStringUTF(str);
}

Но он не вызывается ... и я получаю журнал как "messageMe метод не найден!", Значит метод не соответствует сигнатуре ... кто-нибудь может подсказать о моих ошибках?

1 Ответ

0 голосов
/ 16 марта 2012

Ваша подпись в порядке. Вы уверены, что ваш код не выполняется должным образом, хотя messageMe имеет значение NULL? Мне случилось, что мой код работал нормально, несмотря на то, что jmethodID NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...