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,一经查实,立即删除!

相关文章

从 PostgreSQL 中挽救损坏的表

~/tmp-dir.dab4fd85-8b47-4d9a-b15c-18312ef61075 pg_dump -U postgres -h locathost www_p1 > wow_p1.sqlpg_dump&#xff1a;错误&#xff1a;转储表 “page_views” 的内容失败&#xff1a;PQgetResult() 失败。pg_dump&#xff1a;详细信息&#xff1a;来自服务器的错误…

Vue 封装公告滚动

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

asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?

对于并发请求&#xff0c;每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal&#xff0c;每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的&#xff0c;因此在并发请求时不会互相干扰。 在并发请求时&#xf…

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服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…

深入解析 Python 2 与 Python 3 的差异与演进

Python 2 和 Python 3 是 Python 编程语言的两个主要版本。Python 3 于 2008 年发布&#xff0c;旨在解决 Python 2 中的一些设计缺陷&#xff0c;并引入了许多新特性。虽然 Python 2 在很长一段时间内仍然被广泛使用&#xff0c;但自 2020 年 1 月 1 日起&#xff0c;Python 2…

【“软件工程”基础概念学习】

基础和相关概念 英文&#xff1a;Software Engineering 软&#xff1a;物体内部的组织疏松&#xff0c;受外力作用后容易改变形状软件&#xff1a; 计算机系统的组成部分&#xff0c;是指挥计算机进行计算、判断、处理信息的程序系统。通常分为系统软件和应用软件。借指某项活…

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

声明&#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;其中一段文本从左到右逐渐从…

负载均衡服务器要怎么配置?

目录 一、概述&#xff1a; 二、硬件配置&#xff1a; 三、操作系统配置&#xff1a; 四、负载均衡软件&#xff1a; 五、网络配置&#xff1a; 六、软件安装步骤&#xff1a; 6.1 安装 Nginx 6.2 安装 LVS 6.3 安装 HAProxy 6.4 安装 Keepalived 一、概述&#xff1…

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

内容概要 在如今快节奏的生活中&#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 预测位姿进…

LeetCode 每日一题 2025/1/6-2025/1/12

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/6 2274. 不含特殊楼层的最大连续楼层数1/7 3019. 按键变更的次数1/8 2264. 字符串中最大的 3 位相同数字1/9 3297. 统计重新排列后包含另一个字符串的子字符串数目 I1/10…

《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》

在当今数字化时代&#xff0c;鸿蒙Next系统与人工智能的融合为开发者带来了前所未有的机遇&#xff0c;开发一款人工智能语音助手应用更是备受关注。以下是在鸿蒙Next系统上开发人工智能语音助手应用的关键步骤&#xff1a; 环境搭建与权限申请 安装开发工具&#xff1a;首先需…