android - NDK 的回调未在 java 中找到方法

标签 android callback android-ndk java-native-interface

我正在尝试在 JNI/NDK 和 android 中实现回调。但我无法获得方法签名或其他正确的东西,为什么找不到该方法?

我的MainActivity实例调用ndk函数:

 void populate(JNIEnv* aEnv, jobject aObj, jstring str){

     ....


    jclass cls = aEnv->FindClass("com/example/jsonpoco/MainActivity");
    jmethodID mid = aEnv->GetMethodID(cls, "add", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;D;D)V");
    std::list<MyRefComplexType>::iterator it = ref->myRefs.begin();
    for(int i = 0; i < ref->myRefs.size()/100;i++){
      std::advance(it, 1);
      printf(it->getMyNo().c_str()); //<-Works
      jstring myNo = aEnv->NewStringUTF(it->getMyNo().c_str());
      jstring myName = aEnv->NewStringUTF(it->getMyName().c_str());
      jstring myUrl = aEnv->NewStringUTF(it->getMyUrl().c_str());
      aEnv->CallVoidMethod(aObj,mid, myNo, myName, myUrl, it->getMyLocation()->getLatitude(), it->getMyLocation()->getLongitude());

}

调用 native 代码的 Java 类实现了以下处理回调的方法:

    public void add(String myNo, String myName,String myUrl, double lat, double lon){
    storesWrapper.add(storeNo, storeName, storeUrl, lat, lon);
}

我收到以下错误:

04-09 16:31:42.431: W/dalvikvm(25852): JNI WARNING: JNI method called with exception pending
04-09 16:31:42.431: W/dalvikvm(25852):              in Lcom/example/jsonpoco/MainActivity;.json_parse:(Ljava/lang/String;)V (NewStringUTF)
04-09 16:31:42.431: W/dalvikvm(25852): Pending exception is:
04-09 16:31:42.431: I/dalvikvm(25852): java.lang.NoSuchMethodError: no method with name='add' signature='(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;D;D)V' in class Lcom/example/jsonpoco/MainActivity;

最佳答案

方法签名应该是

(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;DD)V

D后面有一个分号,这是错误的。

关于android - NDK 的回调未在 java 中找到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904856/

相关文章:

c++ - 在类 Base 中实现函数的最有效方法

JavaScript:将更改参数传递给回调

javascript - 有没有更好的方法在 javascript 中进行回调链接?

android - Android Studio 上的 NDK 一直在重建,需要永远

Android edittext更改弹出上下文菜单样式

Android 3D按钮src填充

java - 当从 Android 的锁定屏幕上单击通知操作时,如何以编程方式解锁屏幕?

android - Android中的Qt和app数据存储

android - Cocos2dx 安卓构建错误: "arm-linux-androideabi-g++: No such file or directory"

android - Android 上的 ffmpeg 解码