2017-03-22 56 views
0

存在NoSuchFieldError錯誤我有一個Java類:JNI:其中顯然有正確的簽名

public class ClassOne implements Serializable { 
    private String bField; 
    private ArrayList<SomeClass> aField = new ArrayList<SomeClass>(); 
} 

我嘗試這種方式來使用它在C:

jlong 
Java_ClassJNI_getArrayContent(JNIEnv* env, jobject this, 
               jobject argument, jlong handle, jint isFirst) { 

    jfieldID fid_bField, fid_aField; 
    jclass cls = (*env)->GetObjectClass(env, argument); 
    fid_bField = (*env)->GetFieldID(env, cls, "bField", "Ljava/lang/String;"); 
    fid_aField = (*env)->GetFieldID(env, cls, "aField", "Ljava.util.ArrayList;"); 

... 

我得到這個錯誤:

java.lang.NoSuchFieldError: no field with name='aField' signature='Ljava.util.ArrayList;' in class LClassOne; 

我已經清理並重建應用程序,我一直在收到這個。 這是一個始終有效並且以某種方式停止的代碼,根本沒有對類進行任何更改。我做了git重設,以確保我沒有在任何地方搞砸,但是nada。它仍然會拋出同樣的錯誤。

我沒有調試應用程序,以確保傳遞的對象是正確的,他們是。該類是正確的,bField被正確拾取,但aField引發錯誤。

我試過將ArrayList<SomeClass>更改爲ArrayList,但它沒有任何改變。

我很迷茫,你知道爲什麼會發生這種情況嗎?

回答

2

描述符應該是「Ljava/util/ArrayList;」。斜槓而不是點。

+0

上帝保佑你......你是對的!當然。有趣的事情:它適用於一個平板電腦上的點[Android 7],而不是另一個[Android 4]上的點。 – Krystian