AndroidSDK26之后的JNI GetObjectField被调用,带有挂起的异常java。自定义数组对象的lang.NoSuchFieldError
在JNI中,我正在调用一个自定义数组对象。我从foo那里得到了它的类型。getclass()。getName()并使用它来获取GetFieldID。 类型如下:[L完全限定类名
在sdk25中,我能够毫无错误地获取“GetObjectField”
在SDK 26中,我得到以下错误:
A/zygote64: java_vm_ext.cc:534] JNI DETECTED ERROR IN APPLICATION: JNI GetObjectField called with pending exception java.lang.NoSuchFieldError: no type "[Lcom..customClassName;" found and so no field "fieldname" could be found in class "Lcom..parentClass;" or its superclasses
我知道较新的SDK中有一些变化。但是,我不知道如何改变它,以便没有错误。 谢谢
# 1 楼答案
不确定@Alex的评论,因为我无法尝试
不过我找到了解决办法
Java端:
自定义对象的类ClassA具有该类ClassB的数组对象,如下所示
现在,我不再只向JNI发送ClassA的对象,而是分别发送ClassA和ClassB的对象。 从JNI开始,它不接受来自SDK 26的自定义对象类型
JNI端:
对于迭代,您可以在java端使用For循环,并将迭代器作为sendA()和sendB()的参数发送给JNI
此外,还有一种方法可以将对象序列化为字符串,并从JNI端将其反序列化回对象。。但是,作为JNI的新手,我没有足够的信心在JNI端反序列化定制数组对象