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

123 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

前言

在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)

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

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

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