我们通过jni调用C代码不可能每次只是去调一个方法,通常,我们需要传递一些值过去。

例如,播放电影,那就肯定需要你把电影的 url给 C的播放器吧,等等。

接下来就看一看怎么去传递这些值:

首先是最简单的 int类型:

申明变量

	//c实现两个数相加
public native int add(int x ,int y);

调用方法

    	//Java把两个int给c语言,c语言处理完还给java
int result = add(10,20);
Toast.makeText(this, result+ "", 0).show();

C代码实现

JNIEXPORT jint JNICALL Java_com_test_ndk3_MainActivity_add
(JNIEnv * env, jobject obj, jint x, jint y){
return x + y;
}

就是int成了  jint,没多大区别

下面看String

字符串就要麻烦很多了,JAVA调用方法和上面的一样,就不重复的写了,也没多大的意义

就看下不一样的地方

//将java字符串 转换成 c的字符串
char* Jstring2CStr(JNIEnv* env, jstring jstr)//zhang3.getBytes("gb2312");
{
char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env,"java/lang/String");
jstring strencode = (*env)->NewStringUTF(env,"GB2312");
jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode); // String .getBytes("GB2312");
jsize alen = (*env)->GetArrayLength(env,barr);
jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1); //"\0"
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
(*env)->ReleaseByteArrayElements(env,barr,ba,0); //
return rtn;
}

需要把java的字符串转成C的字符串

其他地方都差不多

就不赘述了,最后会把学习例子放上来大家参考

接下来是int数组

这里要注意的一点是 C中的指针概念,如果不明白,多看看

  (JNIEnv * env, jobject obj, jintArray jintArr){
//得到数组元素信息(首元素的位置 ==== 数组的首地址) +10 得到数组的长度
//jsize (*GetArrayLength)(JNIEnv*, jarray);
//得到指定数组的元素的个数
jint len = (**env).GetArrayLength(env, jintArr);
//jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
//得到指定数组中的元素信息
//jboolean* JNI_TRUE 1 复制 JNI_FLASE 0 引用(不复制)
//返回值: 得到数组元素后 数组的起始位置
jint* arr = (**env).GetIntArrayElements(env, jintArr, 0);

资源下载地址   :http://download.csdn.net/detail/brightshadow11111/5947267

jni java和C之间的值传递(int String int[])的更多相关文章

  1. WP8:Unity3D之间的值传递

    在前面的讨论中,我们介绍了如何在Unity3D for WP8中使用高于.Net 3.5的第三方库,传送门:http://www.cnblogs.com/zhxilin/p/3311240.html ...

  2. java参数传递时到底是值传递还是引用传递

    java参数传递时到底是值传递还是引用传递(baidu搜集) 问”,很多人的BLOG里都引用这些面试题,最近因为工作内容比较枯燥,也来看看这些试题以调节一下口味,其中有一道题让我很费解. 原题是:当一 ...

  3. Backbone中父子view之间的值传递

    backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义.为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一 ...

  4. 通过$broadcast或$emit在子级和父级controller之间进行值传递

    通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系, $emit只能向父级parent controller传递事件event ...

  5. vue.js 同级组件之间的值传递方法(uni-app通用)

    vue.js 兄弟组件之间的值传递方法 https://blog.csdn.net/jingtian678/article/details/81634149

  6. Vue父子之间的值传递

    将通过两个input框实现父子之间的值传递作为演示,效果图 先注册父子各一个组件,代码如下 <div id="app"> <parent></pare ...

  7. Java中传参的值传递和引用传递问题(转)

    今天遇到了一个java程序,需要用参数来返回值(虽然最后用另一种方法实现了),在网上看到这样一篇文章,很受启发. 本文章来自于http://hi.baidu.com/xzhilie/blog/item ...

  8. Java的参数传递是「值传递」还是「引用传递」?

    关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...

  9. Java中不得不谈的值传递和地址传递

    个人的一些认识,希望能对初学Java的你,或者困惑于方法参数传递的你祈祷一丝帮助! 下面是一些作者的个人观点,如果有错,欢迎各位大牛指出错误,灰常感谢您的观看与支持... -------------- ...

随机推荐

  1. SGU 276 Andrew's Troubles

    简单的题.直接找题意来就好了. #include <iostream> #include <cstdio> using namespace std; int s, n, ans ...

  2. CentOS7下安装配置vncserver

    之前试了xmanager,不过好像和在centos6有很大不同,居然没成功,然后找到了vncserver,试了下,成了 参考:http://blog.csdn.net/jiangliqing1234/ ...

  3. (二)跟我一起玩Linux网络服务:BIND的自动部署(附上完整的代码)

    2015-03-24   如果看了我之前写的文章 DNS服务——BIND(/etc/named.conf./var/named)设置实现和解释,再来看这篇文章,你会发现部署BIND是件很简单的事情 如 ...

  4. phpcms v9用get-sql调用数据表中的图组图片示例代码

    {pc:get sql="SELECT pictureurls FROM phpcms_picture_data where id = $id" start="0&quo ...

  5. [Android分享] 彻底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi

    来自: http://www.eoeandroid.com/thread-565562-1-1.html?_dsign=42bed080 非常感谢楼主分享 这个问题我相信困惑了好多人包括很多老鸟,而且 ...

  6. Android各种访问权限Permission详解

    原文:http://jingyan.baidu.com/article/afd8f4de4688af34e386e976.html 在Android的设计中,资源的访问或者网络连接,要得到这些服务都需 ...

  7. Shell 控制并发

    方法1: #!/bin/bash c=0 for i in `seq -w 18 31`;do while [ $c -ge 3 ];do c=$(jobs -p |wc -w) sleep 1s d ...

  8. MAC 开发工具

    web开发编辑器 Espresso下载地址   密码: i9hr

  9. BZOJ 1143 祭祀

    Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成 ...

  10. XML CDATA

    /* <![CDATA[ */var mv_dynamic_to_top = {"text":"To Top","version":& ...