5.4jni返回结构数组

博客探讨了在JNI中如何返回结构数组,并解决了在处理过程中遇到的pitch值覆盖问题。文章通过示例展示了在Java中定义数组的方法,并强调了在JNI中处理结构数组时,对象不能复用以确保数据正确更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)textView.setBackgroundColor(Color.RED);
(2)java中可以用变量定义数组:

int count=0;
int[] scores=new int[count];

(3)jni中返回结构数组:(对应到java中为类)
纠结了一个下午的pitch值被覆盖的问题是因为obj不能为同一个(需要更新)

jobjectArray Java_com_example_sms_Pitch_getStructArray
(JNIEnv *env, jobject obj, jstring path){
const char *c_path;
c_path = env->GetStringUTFChars(path,NULL);
jint length = getSenLen(c_path);
jobjectArray args = 0;
jsize len = length;
jclass objClass = env->FindClass("java/lang/Object");
args = env->NewObjectArray(len, objClass, NULL);
jclass objectClass =env->FindClass("com/example/sms/Pitch");
jfieldID senStarT = env->GetFieldID(objectClass,"sentenceStartTime","I");
jfieldID senEndT = env->GetFieldID(objectClass,"sentenceEndTime","I");
jfieldID wordStaT = env->GetFieldID(objectClass,"wordStartTime","I");
jfieldID wordEndT = env->GetFieldID(objectClass,"wordEndTime","I");
jfieldID stanP = env->GetFieldID(objectClass,"standardPitch","I");
jfieldID wor=env->GetFieldID(objectClass,"word","[C");

Pitch *pitch=new Pitch[10];
pitch=standardPitch(c_path);

jmethodID consID = env->GetMethodID(objectClass, "<init>", "()V");
for(int i=0;i<length;i++){
    jobject obj = env->NewObject(objectClass, consID);
    (env)-    >SetIntField(obj,senStarT,pitch[i].sentenceStartTime);
    (env)->SetIntField(obj,senEndT,pitch[i].sentenceEndTime);
    (env)->SetIntField(obj,wordStaT,pitch[i].wordStartTime);
    (env)->SetIntField(obj,wordEndT,pitch[i].wordEndTime);
    (env)->SetIntField(obj,stanP,pitch[i].standardPitch);
    (env)->SetObjectArrayElement(args,i,obj);
}
       return args;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值