当前位置: 首页 > 知识库问答 >
问题:

Android sdk 26以后-调用了JNI GetObjectField,但带有自定义数组对象的挂起异常java.lang.NoSuchFieldError

蓝侯林
2023-03-14

我知道在较新的SDK中有一些变化。但是,我不知道如何改变它,使它没有错误。多谢了。

共有1个答案

萧奇
2023-03-14

不确定@Alex的评论,因为我无法尝试。

不过我找到了一个变通办法,

Java端:

日本国家机构方面:

ClassA a;

 //sendA function for classA similiar as below.

extern "C"
JNIEXPORT jint JNICALL
Java_<PATH_TO_FUNCTION>_sendB(JNIEnv *env,jobject instance,jobject BObj) {
    LOGD(TAG,"sendB: START");
    jclass jBClass=env->FindClass("com/< path to class separated by '/' >");

    //  int Field jbid

    jfieldID jbid = env->GetFieldID(jBClass, "bId", "I"); 
    jint bId = env->GetIntField(BObj, jbid);
    obja.objb[0].bId = (int) bId;
    LOGI(TAG, "\t bId[%d]: %d ", 0, obja.objb[0].bId); 
     return 0; 
   }

对于迭代,您可以在java端使用For循环,并将迭代器作为sendA()和sendB()的参数发送给JNI。

此外,还有一种方法可以将对象序列化为字符串,并从JNI端反序列化为对象。但是,作为JNI的新手,我没有足够的信心去反序列化JNI端的自定义数组对象。

 类似资料:
  • 我在创建包含自定义对象数组的数组时遇到了问题。 出于多种原因,我希望将容器创建为可比较数组的标准数组: 其中包含的每个自定义对象数组必须具有不同的长度 自定义对象数组内置了自动排序工具,这些工具不适合我希望它们适合的较大包含数组 自定义对象数组可以工作,并且已经过彻底测试。 我在创建较大对象时收到的例外情况是: 线程“main”中出现异常java.lang.ClassCastException:

  • 我正在尝试构建一个类,该类使用多处理请求来并行发出多个请求。我遇到一个问题,它只是挂起,并给我一个神秘的错误消息,我不确定的方式。 下面是我的代码,它基本上只是使用一个带回调的池将结果放入列表。我有一个要求,我需要一个"硬超时"为每个URL,即,如果一个URL需要几秒钟以上的下载其内容,我只是想跳过它。所以我使用池超时,并对尝试的URL和返回的URL内容进行了比较,尝试但未返回的URL被认为失败了

  • 我正在尝试使用基于自定义列表的自定义创建一个自定义。 自定义对象是名为的类名,其中包含一些用于消息内容、收件人、时间戳和状态(读取、发送等)的字段。 在看了这个问题:用FXML在JavaFX中定制ListView之后,我成功地做到了: null 现在,ConversationCell类: 我不能显示ConversationCellController,但我所能说的是,这是我(在其构造函数中)加载设

  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 我不明白为什么我总是得到这个错误