Android JNI结构体和指针数组的使用以及调用Java类的方法和属性

1.结构体的使用

struct Work{
    char name[10];
    int age;
}darren = {"Darren",23},jack;//默认给结构体赋值
struct Worker{
    char name[10];
    int age;
    struct Work work;
};
extern "C" JNIEXPORT void JNICALL
Java_com_xinrui_ndkapp_MainActivity_usestruct(JNIEnv *env, jobject instance){
    struct Work work;
    work.age=24;
    strcpy(work.name,"eo");
    struct Work works={"muchunxia",24};
    LOGE("name=%s,age=%d,jack.name=%s,jack.age=%d,%s,%d",darren.name,darren.age,jack.name,jack.age,works.name,works.age);
    struct Worker worker;
    worker.age=56;
    strcpy(worker.name,"hhoooe");
    worker.work.age=90;
    strcpy(worker.work.name,"ooeoooo");
    struct Worker workers={"yanseror",34,{"lili",26}};
    LOGE("name=%s,age=%d,work.name=%s,work.age=%d,%s,%d",worker.name,worker.age,worker.work.name,worker.work.age,workers.work.name,workers.work.age);
    Work* work_one = (Work*)malloc(sizeof(5)*10);
    work_one->age=100;
    strcpy(work_one->name,"liiiiii");
    work_one+=4;
    work_one->age=109;
    strcpy(work_one->name,"liiiiii9");
    LOGE("name=%s,age=%d",work_one->name,work_one->age);
    free(work_one);
    Work* work_s[3];//初始化数组指针
    for(int i=0;i<3;i++){
        Work work={"jsjf",34+i};
        work_s[i]=&work;
        LOGE("name=%s,age=%d",work_s[i]->name,work_s[i]->age);
    }
}

2.调用Java类的方法和属性(结构体赋值)

extern "C" JNIEXPORT void JNICALL
Java_com_xinrui_ndkapp_MainActivity_setAttr(JNIEnv *env, jobject instance,jobject o){
    jclass cla = env->FindClass("com/xinrui/ndkapp/entity/MediaInfo");
    //方法赋值
    jmethodID jmethodID1 = env->GetMethodID(cla,"setWidth","(I)V");
    jmethodID jmethodID2 = env->GetMethodID(cla,"setStr","(Ljava/lang/String;)V");
    jmethodID jmethodID3 = env->GetMethodID(cla,"setHeight","(I)V");
    jstring str=env->NewStringUTF("oooowwe");
    env->CallVoidMethod(o,jmethodID1,24);
    env->CallVoidMethod(o,jmethodID2,str);
    env->CallVoidMethod(o,jmethodID3,45);
    env->DeleteLocalRef(str);
    //属性赋值
    jfieldID jfieldID1 = env->GetFieldID(cla,"width","I");
    jfieldID jfieldID2 = env->GetFieldID(cla,"height","I");
    jfieldID jfieldID3 = env->GetFieldID(cla,"str","Ljava/lang/String;");
    env->SetIntField(o,jfieldID1,52);
    env->SetIntField(o,jfieldID2,68);
    env->SetObjectField(o,jfieldID3,env->NewStringUTF("muchuxia"));
}

MediaInfo 类

package com.xinrui.ndkapp.entity;

public class MediaInfo {
    public int width;

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    public int height;
    public String str;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值