jclass clsList = env->FindClass("java/util/ArrayList");
jclass clsCruiseInfo = env->FindClass("com/uniview/netsdk/Bean/CruiseInfoBean");
jclass clsCruisePoint = env->FindClass("com/uniview/netsdk/Bean/CruisePointBean");
jmethodID mtdListInit = env->GetMethodID(clsList, "", "()V");
jmethodID mtdListAdd = env->GetMethodID(clsList, "add", "(Ljava/lang/Object;)Z");
jmethodID mtdCuriseInit = env->GetMethodID(clsCruiseInfo, "", "()V");
jmethodID mtdCuriseID = env->GetMethodID(clsCruiseInfo, "setDwCuriseID", "(I)V");
jmethodID mtdCuriseName = env->GetMethodID(clsCruiseInfo, "setSzCuriseName", "(Ljava/lang/String;)V");
jmethodID mtdSize = env->GetMethodID(clsCruiseInfo, "setDwSize", "(I)V");
jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Lcom/uniview/netsdk/Bean/CruisePointBean;)V");
jmethodID mtdCruisePointInit = env->GetMethodID(clsCruisePoint, "", "()V");
jmethodID mtdPresetID = env->GetMethodID(clsCruisePoint, "setDwPresetID", "(I)V");
jmethodID mtdStayTime = env->GetMethodID(clsCruisePoint, "setDwStayTime", "(I)V");
jmethodID mtdSpeed = env->GetMethodID(clsCruisePoint, "setDwSpeed", "(I)V");
jmethodID mtdReserve = env->GetMethodID(clsCruisePoint, "setDwReserve", "(I)V");
jsize len1 = stCuriseList.dwSize;
for(int i = 0; i < len1; i++)
{
jobject objCruiseInfo = env->NewObject(clsCruiseInfo, mtdCuriseInit, "");
env->CallVoidMethod(objCruiseInfo, mtdCuriseID, (jint)stCuriseList.astCruiseInfo[i].dwCuriseID);
env->CallVoidMethod(objCruiseInfo, mtdCuriseName, env->NewStringUTF(stCuriseList.astCruiseInfo[i].szCuriseName));
env->CallVoidMethod(objCruiseInfo, mtdSize, (jint)stCuriseList.astCruiseInfo[i].dwSize);
jsize len2 = stCuriseList.astCruiseInfo[i].dwSize;
printf("1\n");
jobject arrayCount = env->AllocObject(clsCruiseInfo);
for(int k = 0; k < len2; k++)
{
jobject objobjCruisePoint = env->NewObject(clsCruisePoint, mtdCruisePointInit, "");
env->CallVoidMethod(objobjCruisePoint, mtdPresetID, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwPresetID);
env->CallVoidMethod(objobjCruisePoint, mtdStayTime, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwStayTime);
env->CallVoidMethod(objobjCruisePoint, mtdSpeed, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwSpeed);
env->CallVoidMethod(objobjCruisePoint, mtdReserve, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwReserve);
env->CallBooleanMethod(arrayCount, mtdListAdd, objobjCruisePoint);
}
env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);
env->CallBooleanMethod(pstCruiseList, mtdListAdd, objCruiseInfo);
在倒数第二行报错,请大神解答!
先前代码有点乱 重贴一份
jclass clsList = env->FindClass("java/util/ArrayList");
jclass clsCruiseInfo = env->FindClass("com/uniview/netsdk/Bean/CruiseInfoBean");
jclass clsCruisePoint = env->FindClass("com/uniview/netsdk/Bean/CruisePointBean");
jmethodID mtdListInit = env->GetMethodID(clsList, "<init>", "()V");
jmethodID mtdListAdd = env->GetMethodID(clsList, "add", "(Ljava/lang/Object;)Z");
jmethodID mtdCuriseInit = env->GetMethodID(clsCruiseInfo, "<init>", "()V");
jmethodID mtdCuriseID = env->GetMethodID(clsCruiseInfo, "setDwCuriseID", "(I)V");
jmethodID mtdCuriseName = env->GetMethodID(clsCruiseInfo, "setSzCuriseName", "(Ljava/lang/String;)V");
jmethodID mtdSize = env->GetMethodID(clsCruiseInfo, "setDwSize", "(I)V");
jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Lcom/uniview/netsdk/Bean/CruisePointBean;)V");
jmethodID mtdCruisePointInit = env->GetMethodID(clsCruisePoint, "<init>", "()V");
jmethodID mtdPresetID = env->GetMethodID(clsCruisePoint, "setDwPresetID", "(I)V");
jmethodID mtdStayTime = env->GetMethodID(clsCruisePoint, "setDwStayTime", "(I)V");
jmethodID mtdSpeed = env->GetMethodID(clsCruisePoint, "setDwSpeed", "(I)V");
jmethodID mtdReserve = env->GetMethodID(clsCruisePoint, "setDwReserve", "(I)V");
jsize len1 = stCuriseList.dwSize;
for(int i = 0; i < len1; i++)
{
jobject objCruiseInfo = env->NewObject(clsCruiseInfo, mtdCuriseInit, "");
env->CallVoidMethod(objCruiseInfo, mtdCuriseID, (jint)stCuriseList.astCruiseInfo[i].dwCuriseID);
env->CallVoidMethod(objCruiseInfo, mtdCuriseName, env->NewStringUTF(stCuriseList.astCruiseInfo[i].szCuriseName));
env->CallVoidMethod(objCruiseInfo, mtdSize, (jint)stCuriseList.astCruiseInfo[i].dwSize);
jsize len2 = stCuriseList.astCruiseInfo[i].dwSize;
printf("1\n");
jobject arrayCount = env->AllocObject(clsCruiseInfo);
for(int k = 0; k < len2; k++)
{
jobject objobjCruisePoint = env->NewObject(clsCruisePoint, mtdCruisePointInit, "");
env->CallVoidMethod(objobjCruisePoint, mtdPresetID, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwPresetID);
env->CallVoidMethod(objobjCruisePoint, mtdStayTime, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwStayTime);
env->CallVoidMethod(objobjCruisePoint, mtdSpeed, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwSpeed);
env->CallVoidMethod(objobjCruisePoint, mtdReserve, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwReserve);
env->CallBooleanMethod(arrayCount, mtdListAdd, objobjCruisePoint);
}
env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);
env->CallBooleanMethod(pstCruiseList, mtdListAdd, objCruiseInfo);
java类:
public class CruiseInfoBean {
private int dwCuriseID; /* 轨迹ID Route ID */
private String szCuriseName; /* 轨迹名称 Route name */
private int dwSize; /* 路径包含的轨迹点数量 Number of presets included in the route */
private List<CruisePointBean> astCruisePoint; /* 路径包含的轨迹点信息 Information of presets included in the route */
public CruiseInfoBean(){
}
public int getDwCuriseID() {
return dwCuriseID;
}
public void setDwCuriseID(int dwCuriseID) {
this.dwCuriseID = dwCuriseID;
}
public String getSzCuriseName() {
return szCuriseName;
}
public void setSzCuriseName(String szCuriseName) {
this.szCuriseName = szCuriseName;
}
public int getDwSize() {
return dwSize;
}
public void setDwSize(int dwSize) {
this.dwSize = dwSize;
}
public List<CruisePointBean> getAstCruisePoint() {
return astCruisePoint;
}
public void setAstCruisePoint(List<CruisePointBean> astCruisePoint) {
this.astCruisePoint = astCruisePoint;
}
}
package com.uniview.netsdk.Bean;
public class CruisePointBean {
private int dwPresetID; /* 预置位ID Preset ID */
private int dwStayTime; /* 停留时间 Stay time */
private int dwSpeed; /* 转动速度 Speed */
private int dwReserve; /* 保留字段 Reserved */
public CruisePointBean(){
}
public int getDwPresetID() {
return dwPresetID;
}
public void setDwPresetID(int dwPresetID) {
this.dwPresetID = dwPresetID;
}
public int getDwStayTime() {
return dwStayTime;
}
public void setDwStayTime(int dwStayTime) {
this.dwStayTime = dwStayTime;
}
public int getDwSpeed() {
return dwSpeed;
}
public void setDwSpeed(int dwSpeed) {
this.dwSpeed = dwSpeed;
}
public int getDwReserve() {
return dwReserve;
}
public void setDwReserve(int dwReserve) {
this.dwReserve = dwReserve;
}
}
env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);
你这一句参数不对吧,要求是一个list,你传的也不是一个对象数组 啊
我改成对象数组还是不对,jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Ljava/lang/Object;)V");
这一句的第三个参数有没有错啊
jclass clsList = env->FindClass("java/util/ArrayList");
jclass clsCruiseInfo = env->FindClass("com/uniview/netsdk/Bean/CruiseInfoBean");
jclass clsCruisePoint = env->FindClass("com/uniview/netsdk/Bean/CruisePointBean");
jmethodID mtdListInit = env->GetMethodID(clsList, "<init>", "()V");
jmethodID mtdListAdd = env->GetMethodID(clsList, "add", "(Ljava/lang/Object;)Z");
jmethodID mtdCuriseInit = env->GetMethodID(clsCruiseInfo, "<init>", "()V");
jmethodID mtdCuriseID = env->GetMethodID(clsCruiseInfo, "setDwCuriseID", "(I)V");
jmethodID mtdCuriseName = env->GetMethodID(clsCruiseInfo, "setSzCuriseName", "(Ljava/lang/String;)V");
jmethodID mtdSize = env->GetMethodID(clsCruiseInfo, "setDwSize", "(I)V");
jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Ljava/lang/Object;)V");
jmethodID mtdCruisePointInit = env->GetMethodID(clsCruisePoint, "<init>", "()V");
jmethodID mtdPresetID = env->GetMethodID(clsCruisePoint, "setDwPresetID", "(I)V");
jmethodID mtdStayTime = env->GetMethodID(clsCruisePoint, "setDwStayTime", "(I)V");
jmethodID mtdSpeed = env->GetMethodID(clsCruisePoint, "setDwSpeed", "(I)V");
jmethodID mtdReserve = env->GetMethodID(clsCruisePoint, "setDwReserve", "(I)V");
jsize len1 = stCuriseList.dwSize;
for(int i = 0; i < len1; i++)
{
jobject objCruiseInfo = env->NewObject(clsCruiseInfo, mtdCuriseInit, "");
env->CallVoidMethod(objCruiseInfo, mtdCuriseID, (jint)stCuriseList.astCruiseInfo[i].dwCuriseID);
env->CallVoidMethod(objCruiseInfo, mtdCuriseName, env->NewStringUTF(stCuriseList.astCruiseInfo[i].szCuriseName));
env->CallVoidMethod(objCruiseInfo, mtdSize, (jint)stCuriseList.astCruiseInfo[i].dwSize);
jsize len2 = stCuriseList.astCruiseInfo[i].dwSize;
printf("1\n");
jobjectArray arrayCount = env->NewObjectArray(len2, clsCruisePoint, NULL);
for(int k = 0; k < len2; k++)
{
jobject objobjCruisePoint = env->NewObject(clsCruisePoint, mtdCruisePointInit, "");
env->CallVoidMethod(objobjCruisePoint, mtdPresetID, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwPresetID);
env->CallVoidMethod(objobjCruisePoint, mtdStayTime, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwStayTime);
env->CallVoidMethod(objobjCruisePoint, mtdSpeed, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwSpeed);
env->CallVoidMethod(objobjCruisePoint, mtdReserve, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwReserve);
(env)->SetObjectArrayElement(arrayCount, k, objobjCruisePoint);
}
printf("no\n");
env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);
printf("yes\n");
env->CallBooleanMethod(pstCruiseList, mtdListAdd, objCruiseInfo);
}