前面讲到了java和native数据类型,这里就开始做一下使用:

第一步:新建工程

第二部:书写 java方法:

  1. public class NativeMethod {
  2. static {
  3. System.loadLibrary("com_nedu_jni_jnidemo5-jni");
  4. }
  5. public native boolean getBoolean(boolean b);
  6. public native byte getByte(byte b);
  7. public native char getChar(char c);
  8. public native short getShort(short s);
  9. public native int getInt(int i);
  10. public native long getLong(long l);
  11. public native float getFloat(float f);
  12. public native double getDouble(double d);
  13. }

第三部:调用javac、javah命令生成h文件。

第四部:补充native方法,如下:

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include "com_nedu_jni_jnidemo5_NativeMethod.h"
  4. /*
  5. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  6. * Method:    getBoolean
  7. * Signature: (Z)Z
  8. */
  9. JNIEXPORT jboolean JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getBoolean
  10. (JNIEnv *e, jobject thiz, jboolean b){
  11. return b;
  12. }
  13. /*
  14. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  15. * Method:    getByte
  16. * Signature: (B)B
  17. */
  18. JNIEXPORT jbyte JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getByte
  19. (JNIEnv *e, jobject thiz, jbyte by){
  20. return by;
  21. }
  22. /*
  23. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  24. * Method:    getChar
  25. * Signature: (C)C
  26. */
  27. JNIEXPORT jchar JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getChar
  28. (JNIEnv *e, jobject thiz, jchar c){
  29. return c;
  30. }
  31. /*
  32. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  33. * Method:    getShort
  34. * Signature: (S)S
  35. */
  36. JNIEXPORT jshort JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getShort
  37. (JNIEnv *e, jobject thiz, jshort s){
  38. return s;
  39. }
  40. /*
  41. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  42. * Method:    getInt
  43. * Signature: (I)I
  44. */
  45. JNIEXPORT jint JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getInt
  46. (JNIEnv *e, jobject thiz, jint i){
  47. return i;
  48. }
  49. /*
  50. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  51. * Method:    getLong
  52. * Signature: (J)J
  53. */
  54. JNIEXPORT jlong JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getLong
  55. (JNIEnv *e, jobject thiz, jlong l){
  56. return l;
  57. }
  58. /*
  59. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  60. * Method:    getFloat
  61. * Signature: (F)F
  62. */
  63. JNIEXPORT jfloat JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getFloat
  64. (JNIEnv *e, jobject thiz, jfloat f){
  65. return f;
  66. }
  67. /*
  68. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  69. * Method:    getDouble
  70. * Signature: (D)D
  71. */
  72. JNIEXPORT jdouble JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getDouble
  73. (JNIEnv *e, jobject thiz, jdouble d){
  74. return d;
  75. }

第五步:制作mk文件

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE    := com_nedu_jni_jnidemo5-jni
  4. LOCAL_SRC_FILES :=NativeMethod.c
  5. include $(BUILD_SHARED_LIBRARY)

第六步:调用native方法

  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. TextView text=(TextView)findViewById(R.id.text);
  5. NativeMethod method=new NativeMethod();
  6. text.setText("返回boolean:"+method.getBoolean(true)+"\n"+
  7. "返回byte:"+method.getByte((byte) 0)+"\n"+
  8. "返回char:"+method.getChar('c')+"\n"+
  9. "返回short:"+method.getShort((short) 1)+"\n"+
  10. "返回int:"+method.getInt(1)+"\n"+
  11. "返回long:"+method.getLong(9)+"\n"+
  12. "返回float:"+method.getFloat((float) 1.0)+"\n"+
  13. "返回double:"+method.getDouble(2.0)+"\n");
  14. }

运行截图:

总结:JNI中传过来的java基本类型可以直接使用。

/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/

Android JNI入门第五篇——基本数据类型使用的更多相关文章

  1. Android JNI入门第六篇——C调用Java

    本篇将介绍在JNI编程中C调用Java实现. 源码下载地址:http://download.csdn.net/detail/xyz_lmn/4868265 关键代码: java: public cla ...

  2. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  3. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  4. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  5. Hadoop入门第五篇:Hive简介以及部署

    标签(空格分隔): Hadoop Hive hwi 1.Hive简介   之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...

  6. Visualforce入门第五篇_2017.3.1

    Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...

  7. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  8. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  9. java入门第五步之数据库项目实战【转】

    在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...

随机推荐

  1. VirtualBox扩展磁盘空间

    进入VB的安装目录, 输入命令 VBoxManage list hdds获得当前所有虚拟机的uuid 选择需要扩展的磁盘, 输入 VBoxManage modifyhd uuid –resize 81 ...

  2. C# 中使用Newtonsoft.Json 处理JSON数据 绝对能用

    当你搜到这篇文章是幸运的,因为之前我遇到这个问题 主要是 Newtonsoft.Json 版本不一 且网上各种文章 都是复制的 并不说明版本的问题 这里我就不说什么版本的问题了,总之必须使用我这个DL ...

  3. 每天一个小算法(4)----在O(1)时间删除指定结点

    O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点. 需要注意的地方是删除头结点和尾结点的处理. #include <stdio.h> ...

  4. Node爬虫

    Node爬虫 参考 http://www.cnblogs.com/edwardstudy/p/4133421.html 所谓的爬虫就是发送请求,并将响应的数据做一些处理 只不过不用浏览器来发送请求 需 ...

  5. Tensorflow的CNN教程解析

    之前的博客我们已经对RNN模型有了个粗略的了解.作为一个时序性模型,RNN的强大不需要我在这里重复了.今天,让我们来看看除了RNN外另一个特殊的,同时也是广为人知的强大的神经网络模型,即CNN模型.今 ...

  6. Java泛型的一点用法(转)

    1.一个优秀的泛型,建议不要这样写public static <K, V> Map<K, V> getMap(String source, String firstSplit, ...

  7. UVA-548Tree(二叉树的递归遍历)

    Tree Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Des ...

  8. Android系统JNI的实现方式

     Android系统JNI的实现方式 All rights reserved JNI(Java Native Interface)定义了一种Java代码调用C或者C++代码等其它代码的方式. 在A ...

  9. 用C++如何实现开放API接口服务器

    比如新浪微博的API服务器.接口是使用HTTP请求.服务器端如何实现一个HTTP SERVER呢?使用libcurl可以吗? c++的话,一般用libevent或则libev这种库来实现吧.当然如果对 ...

  10. 优化器的使用oracle ---explain plan

    如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以 ...