今天,简单讲讲android 在jni中如何返回一个java的类。

之前,我写了一些关于jni的博客,里面返回的都是简单的int类型,那么如果我需要返回很多int和String类型,那么怎么办呢?当然是在java里写一个类,把需要返回的变量封装成类之间返回。我在网上搜索了资料,终于解决了这个问题。这里记录一下。

在Native层返回一个复杂对象(即一个类咯)

使用的类非常简单,如下:

Student.java

package com.feixun.jni;public class Student
{private int age ;private String name ;//构造函数,什么都不做public Student(){ }public Student(int age ,String name){this.age = age ;this.name = name ;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name){this.name = name;}public String toString(){return "name --- >" + name + "  age --->" + age ;}
}

Java层的方法对应为:

public class HelloJni {...//在Native层返回一个Student对象public native Student nativeGetStudentInfo() ;...
}   

Native层该方法实现为 :

/** Class:     com_feixun_jni_HelloJni* Method:    nativeGetStudentInfo* Signature: ()Lcom/feixun/jni/Student;*/
//返回一个复杂对象
JNIEXPORT jobject JNICALL Java_com_feixun_jni_HelloJni_nativeGetStudentInfo(JNIEnv * env, jobject obl)
{//关于包描述符,这儿可以是 com/feixun/jni/Student 或者是 Lcom/feixun/jni/Student; //   这两种类型 都可以获得class引用jclass stucls = env->FindClass("com/feixun/jni/Student"); //或得Student类引用//获得得该类型的构造函数  函数名为 <init> 返回类型必须为 void 即 VjmethodID constrocMID = env->GetMethodID(stucls,"<init>","(ILjava/lang/String;)V");jstring str = env->NewStringUTF(" come from Native ");jobject stu_ojb = env->NewObject(stucls,constrocMID,11,str);  //构造一个对象,调用该类的构造函数,并且传递参数return stu_ojb ;
}

这里简单讲讲,在jni里主要是通过env->FindClass("com/feixun/jni/Student")找到类id,里面的参数就是类的路径。然后通过类id找到了类的构造函数id,这里env->GetMethodID(stucls,"<init>","(ILjava/lang/String;)V");  的参数第一个是类id, <init>是初始化函数的名称,(ILjava/lang/String;)V对应的是构造函数的参数和返回值,之歌需要了解jni和java变量的对应规则,大家可以自己去网上查找资料。

android jni 返回java类就讲完了。

就这么简单。



android jni 返回java类相关推荐

  1. Android JNI(Java Native Interface)技术介绍

    Android平台上的JNI技术介绍 JUL 15TH, 2013 | COMMENTS NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最 ...

  2. android jni 调用java对象_Android NDK开发之Jni调用Java对象

    本地代码中使用Java对象 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函 ...

  3. Android JNI实现Java与C/C++互相调用,以及so库的生成和调用(JNI方式调用美图秀秀so)

    前言 关于Android Studio如何继承JNI开发环境,请阅读上一篇博文 Android CMake集成JNI开发环境本篇博文将结合实例分别讲解Android中Java如何调用C/C++的方法, ...

  4. jni调用java类_JNI之C++调用Java类 —— java.lang.String

    JNI之C++调用Java类 -- java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用j ...

  5. android jni与java之间数据传输时怎么转换

    1.c中的jstring数据类型就是java传入的String对象,经过jni函数的转化就能成为c的char*. Java 类型 本地c类型 说明 boolean jboolean 无符号 8 位 b ...

  6. Android热修复Java类_Android 热修复(一)

    名词: dex:java文件编译class 然后生成 dex文件在Android上运行: 1.dex分包: 2.找出出现问题的dex文件进行替换操作 3.下载dex文件,静默替换有问题的dex文件,进 ...

  7. Android Jni反射Java方法,弹出对话框

    1.创建页面 /*** @描述 C语言调用java反射方法* @项目名称 App_imooc* @包名 com.android.imooc.jni* @类名 ReflectActivity* @aut ...

  8. android jni返回bitmap,JNI 层 Bitmap 转 OpenCV Mat

    JNI 层 Bitmap 转 OpenCV Mat Java 提供的图片类型大多是 Bitmap 类型(ARGB_8888 或 RGB_565) 那么如果需要使用 OpenCV 进行处理,需要对 Bi ...

  9. android context.java_Android / Java类范围和Context

    我有一个简单的按钮类,当按钮被点击时,我希望另一个类被安装并调用所有的方法.按钮类: public class ButtonActivity extends Activity { Button myB ...

最新文章

  1. 如果编程语言是飞机 | 每日趣闻
  2. 【模板】割点(割顶)
  3. 一个简单案例教你如何用Typescript写Vuex
  4. python如何进行大到小排序_Python3基础 list sort 从小(大)到大(小)排序
  5. 分析酸对酸性染料染羊毛染色性能的影响?举例说明酸性染料染羊毛时,如何选择合适的染浴pH值?并说明原因。
  6. SharePoint 2013 Farm 安装指南——Least Privilege
  7. 【Java】StringBuilder类、包装类
  8. js 通用 1000 金额 三位格式化 1,000
  9. Origin绘制热力图
  10. 计算机的概念重点,2019考研计算机重点知识:十二大基础概念释义
  11. 点云数据集汇总整理(匠心之作,附官方下载地址)
  12. 基于树莓派的人脸识别(Linux系统 百度智能云平台)
  13. SIR传染病模型及matlab代码
  14. 485通讯测试软件,485串口测试 RS485口测试方法
  15. 2014 usnews 计算机科学 排名 天道留学,2014年美国USNews大学公立大学排名情况
  16. C语言控制鼠标自动画图
  17. 仙道服务器维护,【正式服】2月14日例行更新维护公告
  18. 班级logo设计分析
  19. 关于自己配置电脑的一点心得
  20. Gartner丨 边缘计算成熟度曲线 2019

热门文章

  1. continue和pass測试
  2. Linux操作系统-命令-free
  3. 关于调试windows services的方法
  4. 解密QQ非会员漫游聊天记录
  5. dealloc 的水,很深?
  6. java 关键字volatile的作用
  7. 软件工程——结对编程第一次作业
  8. 主体的实践,摘录-----保守还是改革,不是靠思辨的力量,而是靠实践
  9. effective c++ 条款20:宁以pass-by-reference-to-const替换pass-by-value
  10. [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪