JNI使用类签名及字段签名获取字段值

1.获取逻辑:

2.获取逻辑实现代码:

extern "C"
JNIEXPORT void JNICALL
Java_com_example_jnibasetypedemo_MainActivity_getAnimalsNameFromJNI(JNIEnv *env, jobject thiz,jobjectArray animals) {jobject animalObj;int len = env->GetArrayLength(animals);//获取数组长度jclass animalClass = env->FindClass("com/example/jnibasetypedemo/Animal");//获取类对象//获取类字段jfieldID animalClassNameFiels = env->GetFieldID(animalClass, //类对象"name", //字段名"Ljava/lang/String;");//字段签名jstring _jni_string;const char *cplusplus_string;//遍历数组for (int i = 0; i < len; ++i) {animalObj = env->GetObjectArrayElement(animals, i);//取得元素//取类对象字段_jni_string = (jstring) (env->GetObjectField(animalObj, //类对象animalClassNameFiels));//类对字段对象//jstring转char*cplusplus_string = env->GetStringUTFChars(_jni_string, NULL);if (cplusplus_string == NULL) {continue;}LOGD("===>Animal类字段name值:%s", cplusplus_string);//释放内存env->ReleaseStringUTFChars(_jni_string, cplusplus_string);}
}

3.java实现:

声明JNI原生方法

创建Animal类:

package com.example.jnibasetypedemo;public class Animal{public String name;public Animal(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Animal() {}
}

调用原生方法并输入Animal类数组

 Animal[] animals = new Animal[30];for (int i = 0; i < 30; i++) {Animal ani = new Animal();ani.setName("animal name"+(i+1));animals[i]=ani;}getAnimalsNameFromJNI(animals);

4.完整源码地址:

https://github.com/tonyimax/JniBaseTypeDemo.git

5. 输出:

2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name1
2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name2
2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name3
2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name4
2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name5
2025-01-12 13:29:51.211 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name6
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name7
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name8
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name9
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name10
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name11
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name12
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name13
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name14
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name15
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name16
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name17
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name18
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name19
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name20
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name21
2025-01-12 13:29:51.212 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name22
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name23
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name24
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name25
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name26
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name27
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name28
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name29
2025-01-12 13:29:51.213 29675-29675 JNI_LOG                 com.example.jnibasetypedemo          D  ===>Animal类字段name值:animal name30

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 封装公告滚动

文章目录 需求分析1. 创建公告组件Notice.vue2. 注册全局组件3. 使用 需求 系统中需要有一个公告展示&#xff0c;且这个公告位于页面上方&#xff0c;每个页面都要看到 分析 1. 创建公告组件Notice.vue 第一种 在你的项目的合适组件目录下&#xff08;比如components目录&a…

Win10微调大语言模型ChatGLM2-6B

在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行&#xff0c;官方文档在这里&#xff0c;参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1&#xff0c;地址2&#xff0c;文件中数据留几行 模型文件下载地址 &#xff08;注意&#xff1…

HTTP-响应协议

HTTP的响应过程&#xff1f; 浏览器请求数据--》web服务器过程&#xff1a;请求过程 web服务器将响应数据-》到浏览器&#xff1a;响应过程 响应数据有哪些内容&#xff1f; 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…

爬虫基础之爬取歌曲宝歌曲批量下载

声明&#xff1a;本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…

C++ 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

2025年中科院分区大类划分公布!新增8155本

2025年中科院分区表变更情况 扩大收录范围 2025年的期刊分区表在原有的自然科学&#xff08;SCIE&#xff09;、社会科学&#xff08;SSCI&#xff09;和人文科学&#xff08;AHCI&#xff09;的基础上&#xff0c;增加了ESCI期刊的收录&#xff0c;并根据这些期刊的数据进行…

【前端动效】HTML + CSS 实现打字机效果

目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示&#xff0c;这次带来的是一个有趣的“擦除”效果&#xff0c;也可以叫做打字机效果&#xff0c;其中一段文本从左到右逐渐从…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中&#xff0c;租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业&#xff0c;都会因其便捷的功能而受益。简单来说&#xff0c;租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里&#xff0c;我们将带您畅游租赁小程序的海洋&a…

Docker--Docker Compose(容器编排)

什么是 Docker Compose Docker Compose是Docker官方的开源项目&#xff0c;是一个用于定义和运行多容器Docker应用程序的工具。 服务&#xff08;Service&#xff09;&#xff1a;在Docker Compose中&#xff0c;一个服务实际上可以包括若干运行相同镜像的容器实例&#xff0…

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu&#xff0c; 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同&#xff0c;在于TCP是有连接、可靠、面向字节流的。具体来说&#xff0c;TCP设置了一大…

《自动驾驶与机器人中的SLAM技术》ch7:基于 ESKF 的松耦合 LIO 系统

目录 基于 ESKF 的松耦合 LIO 系统 1 坐标系说明 2 松耦合 LIO 系统的运动和观测方程 3 松耦合 LIO 系统的数据准备 3.1 CloudConvert 类 3.2 MessageSync 类 4 松耦合 LIO 系统的主要流程 4.1 IMU 静止初始化 4.2 ESKF 之 运动过程——使用 IMU 预测 4.3 使用 IMU 预测位姿进…

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到&#xff1a; C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

冒泡排序基础与实现

目录 1. 原理图 ​编辑 2. 什么是冒泡排序 3. 工作原理 3.1 具体步骤 3.2 时间复杂度 3.3 空间复杂度 4. 代码实现 5. 总结 1. 原理图 2. 什么是冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复地遍历要排序的列表&am…

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Sign Language Video Retr…

openEuler22.03系统使用Kolla-ansible搭建OpenStack

Kolla-ansible 是一个利用 Ansible 自动化工具来搭建 OpenStack 云平台的开源项目&#xff0c;它通过容器化的方式部署 OpenStack 服务&#xff0c;能够简化安装过程、提高部署效率并增强系统的可维护性。 前置环境准备&#xff1a; 系统:openEuler-22.03-LTS-SP4 配置&…

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据&#xff0c;页面卡死&#xff0c;如何优化&#xff1f;&#xff1f;这里使用 分页 虚拟列表&#xff08;vue-virtual-scroll-list&#xff09;&#xff0c;去模拟一个下拉的内容…