2013-04-09 29 views
2

我試圖在JNI/NDK和android中實現回調。但是我無法得到方法簽名或其他東西,爲什麼找不到方法?來自NDK的回調在java中找不到方法

我的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()); 

} 

我的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; 

回答

4

方法簽名應該是

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

D後有一個分號,這是錯誤的。