Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ndk 调用java方法时,从c++;android中的ndk_Android Ndk - Fatal编程技术网

Android ndk 调用java方法时,从c++;android中的ndk

Android ndk 调用java方法时,从c++;android中的ndk,android-ndk,Android Ndk,我在java中有以下一种方法: public native String jniStringMethod(); public String stringMethod(String s) { Log.d("Testing", "String:" + s); return s; } 我正在尝试以以下方式调用cpp文件中jnitringmethod()中的“stringMethod”方法: jstring Java_ashok_learning_ndk_SampleNDKActivity_

我在java中有以下一种方法:

public native String jniStringMethod();

public String stringMethod(String s) {
  Log.d("Testing", "String:" + s);
  return s;
}
我正在尝试以以下方式调用cpp文件中
jnitringmethod()
中的“stringMethod”方法:

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 method not found!”,这意味着该方法与签名不匹配…有人可以建议我的错误吗?

您的签名没有问题。即使
messageMe
为空,您确定代码没有正确执行吗?我碰巧发现我的代码运行良好,尽管
jmethodID
为空。

您的签名没有问题。即使
messageMe
为空,您确定代码没有正确执行吗?尽管
jmethodID
为空,但我的代码运行良好。

jobject result=env->CallObjectMethod(obj,messageMe,jstr);日志(“结果:%d”,结果);const char*str=env->GetStringUTFChars((jstring)结果,NULL);//应该发布,但真见鬼,这是一个教程:)printf(“%s\n”,str)这些行帮助我
jobject result=env->CallObjectMethod(obj、messageMe、jstr);日志(“结果:%d”,结果);const char*str=env->GetStringUTFChars((jstring)结果,NULL);//应该发布,但真见鬼,这是一个教程:)printf(“%s\n”,str)这些行帮助我