• android JNI float *转MutableList


    data class Test(
        var data:MutableList
    )
    
    JNIEXPORT void JNICALL Java_NativeUtils_assignFloatArrayToHealth(JNIEnv *env, jclass clazz, jobject obj, jfloatArray cData) {
        jclass objClass = env->GetObjectClass(obj);
     
        // 获取 Test类中的 data 属性
        jfieldID dataField = env->GetFieldID(objClass , "data", "Ljava/util/List;");
    
        // 创建一个 ArrayList 对象,并将 float 数组中的数据添加到列表
        jobject arrayList = env->NewObject(env->FindClass("java/util/ArrayList"), env->GetMethodID(env->FindClass("java/util/ArrayList"), "", "()V"));
        jsize length = env->GetArrayLength(cData);
        jfloat *floatData = env->GetFloatArrayElements(cData, NULL);
        jmethodID arrayListAddMethod = env->GetMethodID(env->FindClass("java/util/ArrayList"), "add", "(Ljava/lang/Object;)Z");
    
        jclass floatClass = env->FindClass("java/lang/Float");
        jmethodID floatConstructor = env->GetMethodID(floatClass, "", "(F)V");
    
        for (int i = 0; i < length; i++) {
            jfloat value = floatData[i];
            jobject floatValue = env->NewObject(floatClass, floatConstructor, value);
            env->CallBooleanMethod(arrayList, arrayListAddMethod, floatValue);
        }
        env->ReleaseFloatArrayElements(cData, floatData, 0);
    
        // 将 ArrayList 对象赋值给 Health 类中的 data 属性
        env->SetObjectField(obj, dataField, arrayList);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    JNI 方法中,我们接收了一个 Test对象和一个 float 数组作为参数。我们通过 JNI 方法获取 Test类的引用和其中的 data 字段,然后创建一个 ArrayList 对象,将 float* 数据转换为 Float 对象并添加到列表中,最后将列表赋值给 Test对象的 data 属性。

  • 相关阅读:
    JVM问题排查
    Docker理论— 虚拟化技术分类
    Jvm类加载机制
    LVS-DR集群部署
    c#,字段和属性的区别
    大模型开发06:LangChain 概述
    仪表盘:pyecharts绘制
    RDP协议流程详解(概述)
    win10 安装openssl并使用openssl创建自签名证书
    VM设置共享文件夹方法
  • 原文地址:https://blog.csdn.net/wolf0706/article/details/136632705