.so 将c++转化为安卓可使用的数据
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);
前两个为固定参数 后面的是与上面的第三个参数的类型以及位置保持一致
这只是初学者的代码 有不对得地方恳请大家 多多指教!
- 点赞
- 收藏
- 关注作者
评论(0)