SO 将安卓数据转为C++可读数据

举报
咚咚隆地咚 发表于 2022/09/23 13:46:35 2022/09/23
【摘要】 在c++与安卓的互相转化中,主要使用了JNI来进行作业。jni的数据解析,方便我们安卓端与pc端之间公用同一个数据结构,并可以实现数据的传输,这样会大大的减少我们的代码浪费。而jni回调java是通过反射来实现的,这些反射的接口都定义在 JNIEnv中。在之前的文章中有介绍到关于C++转为安卓可读的数据,今天来介绍将安卓数据转为C++可读数据。jclass aObjectClass = mJ...

在c++与安卓的互相转化中,主要使用了JNI来进行作业。jni的数据解析,方便我们安卓端与pc端之间公用同一个数据结构,并可以实现数据的传输,这样会大大的减少我们的代码浪费。而jni回调java是通过反射来实现的,这些反射的接口都定义在 JNIEnv中。在之前的文章中有介绍到关于C++转为安卓可读的数据,今天来介绍将安卓数据转为C++可读数据。

jclass aObjectClass = mJni->FindClass("完整的类名");

在这里有两种使用方式。

第一种: 也就是现在所使用的方法 FindClass 他是通过传入Java中的完整的类名,通过这个类名来实现查找java的class

第二种 GetObjectClass 他是通过传入jni中的一个java的引用来获取该引用的类型,而这里的引用一定要使用规范,不然会造成读取不成功。

 mJni->GetArrayLength(jobjectArray 名称)

当传入的数据为jobjectArray类型 代表他是一个数据 需要读取他的长度,并且后续操作需要进入for循环。

jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);

通过这个函数来获取java类属性的id

注意:第一个参数使用来写他父的object

第二个参数用来写需要去读的变量名称

第三个参数是写变量的类型

在数据读出的时候 需要获取具体的数据,但是由于雷兴国多,所以展示在下面

jobject GetObjectField(jobject obj, jfieldID fieldID)

jboolean GetBooleanField(jobject obj, jfieldID fieldID)

jbyte GetByteField(jobject obj, jfieldID fieldID)

jchar GetCharField(jobject obj, jfieldID fieldID)

jshort GetShortField(jobject obj, jfieldID fieldID)

jint GetIntField(jobject obj, jfieldID fieldID)

jlong GetLongField(jobject obj, jfieldID fieldID)

jfloat GetFloatField(jobject obj, jfieldID fieldID)

jdouble GetDoubleField(jobject obj, jfieldID fieldID)

我们可以根据自己的需要对其对应使用

最后 我们需要设置一个结构体的变量,用于存储读出来的值

今天的解释到此结束 有不对的地方 习方法加批评指教!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。