今天突然遇到
NoSuchMethodError
问题,被狠狠的折磨了一下,在此记录。
问题!
W/dalvikvm: JNI WARNING: JNI function GetObjectClass called with exception pendingin
....MainActivity;.comList:(Ljava/util/ArrayList;)V (GetObjectClass)
Pending exception is:
I/dalvikvm: java.lang.NoSuchMethodError: no method with name='get' signature=
'(I)F' in class Ljava/util/ArrayList;
at com.xwyd.dtstraining.dtsnative.MainActivity.compt(Native Method)
Android 代码
具体就是创建一个List,然后添加点东西,最后传入native
方法中进行使用。
void soList(){
ArrayList<Float> listAx = new ArrayList<Float>();
listAx.add(-0.01647f);
listAx.add(-0.44549f);
listAx.add(-0.74351f);
listAx.add(-0.81942f);
listAx.add(-0.84121f);
comList(listAx);
}
public native void comList(ArrayList<Float> xList);
CPP 代码
Cpp里面获取get
方法,然后执行一系列操作。本来想着能很顺利的执行下去,没想到在GetMethodID
这里栽了,默默地用小拳拳锤了下胸口。
extern "C"
JNIEXPORT void JNICALL
..._comList(JNIEnv *env, jobject instance, jobject xList)
{
jclass ax_list_jclass = env->GetObjectClass(xList);
// 获取 a X list 的 methodid
jmethodID method;
method = env->GetMethodID(ax_list_jclass, "get", "(I)F");
....
}
cooding 很美好,error 很残酷,run 起来,NoSuchMethodError 出现,滴滴,前方高能。
....
....
未解之谜!