.so 将c++转化为安卓可使用的数据

举报
咚咚隆地咚 发表于 2022/09/22 10:02:55 2022/09/22
【摘要】 jclass objClass = mJni->FindClass(“结构类型”); 定义数组中元素类型如果传入的是数组,需要知道它的大小并进行循环int nsize = myArray.size();创建一个数组对象,里面的每个元素用 objClass元素表示(FindClass 所对应的类型)数组为空 不再进行下面的操作jobjectArray texts = mJni->NewObje...

jclass objClass = mJni->FindClass(“结构类型”); 定义数组中元素类型

如果传入的是数组,需要知道它的大小并进行循环

int nsize = myArray.size();

创建一个数组对象,里面的每个元素用 objClass元素表示(FindClass 所对应的类型)

数组为空 不再进行下面的操作


jobjectArray texts = mJni->NewObjectArray(nsize, objClass, NULL);

if (texts == nullptr) {

    Log_Changer("<so::TryOperateCallBackToJava> undispose");

    return;

}


jmethodID method_set_taskId = mJni->GetMethodID(objClass, "setNextTaskId", "(Ljava/lang/String;)V");

jmethodID Event = mJni->GetMethodID(objClass, "<init>", "()V");

Event 是用来获取构造方法

GetMethodID 是用来 获取java 类中方法的ID  最后一个参数是他的类型

String :"(Ljava/lang/String;)V"

Int  :"(I)V"

Bool :"(Z)V"

如果这里获取的是一个数据结构  最后一个参数是他的结构类型 仿照jclass最后一个参数

jobject objmodel = mJni->NewObject(objClass, method_init_Event, "");

new 一个object  存储它的内容  第一个参数为他的jclass  第二个是他的构造函数

字符串的转化比较特别 一定要使用下面的格式 否则会出错的

 if (str != "") {

        jstring jname = mJni->NewStringUTF(str.c_str());

        mJni->CallVoidMethod(objmodel, method_set_taskId, jname);
    }

CallVoidMethod   适用于将数据存储到 objmodel
大家都是一样的存储方法  但是第二第三个参数要对应

jclass cls;

jmethodID mid;
cls = mJni->GetObjectClass(mThiz);

GetObjectClass(,"")  支持两个参数查询  他所检索的类 不知道类名 并且第二个参数是object
mid = mJni->GetMethodID(cls, "TryOperateAndroidBack", "([Lcn/jucheng/mise/model/java2so/event/operateTimerDelayEvent;Z)V");

这句一定要记得写  第二个参数是安卓端的函数名 一档不能错 第三个参数为 这个函数的参数值  并且需要与下面的参数保持一致

mJni->CallVoidMethod(mThiz, mid, texts, bres);

前两个为固定参数 后面的是与上面的第三个参数的类型以及位置保持一致

这只是初学者的代码 有不对得地方恳请大家 多多指教!

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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