JNI笔记

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

#include "com_noitom_util_libKneeBrace.h"

#include <stdlib.h>

#include "KneeBraceAPI.h"

/* Header for class libKneeBrace */

 

/*

 * Class:     libKneeBrace

 * Method:    KBInit

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBInit

  (JNIEnv *, jclass)

  {

          KBInit();

  }

 

/*

 * Class:     libKneeBrace

 * Method:    KBRelease

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBRelease

  (JNIEnv *, jclass)

  {

          KBRelease();

   

  }

 

/*

 * Class:     libKneeBrace

 * Method:    KBResetStatus

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBResetStatus

  (JNIEnv *, jclass)

  {

        KBResetStatus();

  }

 

/*

 * Class:     libKneeBrace

 * Method:    KBSetHeight

 * Signature: (F)V

 */

JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBSetHeight

  (JNIEnv *, jclass, jfloat height)

  {

        KBSetHeight(height);

  }

 

/*

 * Class:     libKneeBrace

 * Method:    KBPushDailyActivityFrameDataStream

 * Signature: ([BI)LActivityResult;

 */

JNIEXPORT jobject JNICALL Java_com_noitom_util_libKneeBrace_KBPushDailyActivityFrameDataStream

  (JNIEnv * env, jclass objClass, jbyteArray charArray, jint length)

  {

  // 获取Java中的实例类  

        objClass = (env)->FindClass("com/noitom/model/ActivityResult");

  // 获取构造方法Methodid

  jmethodID m_obj = env->GetMethodID(objClass,"<init>","()V");  

  // 创建一个新的ActivityResult对象

  jobject newobj = env->NewObject(objClass,m_obj); 

  // 获取ActivityResult类中每一个变量的定义  

        jfieldID abnormal_index = (env)->GetFieldID(objClass, "abnormal_index", "F");

        jfieldID symmetry_index = (env)->GetFieldID(objClass, "symmetry_index", "F");

        jfieldID walking_distance = (env)->GetFieldID(objClass, "walking_distance", "F");

  jfieldID step_total = (env)->GetFieldID(objClass, "step_total", "I");

  jfieldID time_total = (env)->GetFieldID(objClass, "time_total", "I");

  jfieldID standing_time = (env)->GetFieldID(objClass, "standing_time", "I");

  jfieldID walking_time = (env)->GetFieldID(objClass, "walking_time", "I");

  jfieldID effective_time = (env)->GetFieldID(objClass, "effective_time", "I");

  jfieldID stairs_storey = (env)->GetFieldID(objClass, "stairs_storey", "I");

  jfieldID cycling_time = (env)->GetFieldID(objClass, "cycling_time", "I");

  jfieldID cycling_distance = (env)->GetFieldID(objClass, "cycling_distance", "F");

 

  // 复制数组元素到array内存空间  

  jbyte* data = env->GetByteArrayElements(charArray, NULL);

 

        KBActivityResult result;

        if(data != NULL) {

        // 调用计算函数

            result = KBPushDailyActivityFrameDataStream(data, length);

  // 释放资源

            env->ReleaseByteArrayElements(charArray, data, JNI_ABORT);

        }

        

        // 给ActivityResult对象赋值

  (env)->SetFloatField(newobj, abnormal_index, result.abnormal_index);

  (env)->SetFloatField(newobj, symmetry_index, result.symmetry_index);

  (env)->SetFloatField(newobj, walking_distance, result.walking_distance);

  (env)->SetIntField(newobj, step_total, result.step_total);

  (env)->SetIntField(newobj, time_total, result.time_total);

  (env)->SetIntField(newobj, standing_time, result.standing_time);

  (env)->SetIntField(newobj, walking_time, result.walking_time);

  (env)->SetIntField(newobj, effective_time, result.effective_time);

  (env)->SetIntField(newobj, stairs_storey, result.stairs_storey);

  (env)->SetIntField(newobj, cycling_time, result.cycling_time);

  (env)->SetFloatField(newobj, cycling_distance, result.cycling_distance);

 

        return newobj;

  }

常见错误:

       1. java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path

       2. Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.xxx.HelloWorld.myprint()V

       网上总结很多。错误1,主要是没有办法path路径中加载。错误2主要是没有myprint方法,类库加载没有问题。

       排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,HelloWorld.java包路径,类的包路径要和生成头文件类包路径一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值