java中如何获取一个未知类型的java数组什么类型的长度,这个java数组什么类型可能是int,string,boolean.....的

今天调试了一下Android jni关于Java中调用C代码嘚程序发现我的java数组什么类型参数传递方式不对,导致值传递不正确我的方法是:

 
 
 
 

返回结果:,明显值没有传到C代码

2、问题所在及解决方法

查看了一些关于android jni参数传递方面的资料,发现问题出在C代码中的

我用这种方法的时候用ndk命令编译时出错了。

貌似ndk命令只支持这个方式吧我不太确定,还请高人指点

JNIjava数组什么类型传递与异常处理

JNI通过JNIEnv提供的操作Javajava数组什么类型的功能。它提供了两个函数:一个是操莋java的简单型java数组什么类型的另一个是操作对象类型java数组什么类型的。

因为速度的原因简单类型的java数组什么类型作为指向本地类型的指針暴露给本地代码。因此它们能作为常规的java数组什么类型存取。这个指针是指向实际的Javajava数组什么类型或者Javajava数组什么类型的拷贝的指针叧外,java数组什么类型的布置保证匹配本地类型

为了存取Java简单类型的java数组什么类型,你就要要使用GetXXXArrayElements函数(见表A)XXX代表了java数组什么类型的類型。这个函数把Javajava数组什么类型看成参数返回一个指向对应的本地类型的java数组什么类型的指针。

当你对java数组什么类型的存取完成后要確保调用相应的ReleaseXXXArrayElements函数,参数是对应Java数 组和GetXXXArrayElements返回的指针如果必要的话,这个释放函数会复制你做的任何变化(这样它们就反射到javajava数组什么類型)然后释放所 有相关的资源。

下面通过一个实际的例子,演示一下在JAVA中传递基本类型的java数组什么类型与对象类型的java数组什么类型然後在C++中进行相应的处理。

在这个简单的java程序中我们定义了两种类型的java数组什么类型,一种是整形java数组什么类型属于基本数据类型的java数組什么类型,另一种是字符串类型 的java数组什么类型属于对象java数组什么类型。然后把这两种类型java数组什么类型分别作为参数传递到本地方法sum中去其中sum函数具有相同的函数名和返回值类型,区别它们的是参数类 型这样,就涉及到方法签名的问题方法签名是参数的类型+方法的返回值类型。可知它们的方法签名是不相同的,所以为两个不同的方法

经过编译,生成C++的头文件这个过程可以参考  


//返回一个jint类型的java数组什么类型

//复制java数组什么类型到新的java数组什么类型中

功能:构造一个java数组什么类型对象

返回值:返回一个jintArray类型。

由于在C++中,jintArray不能用下標直接存取,所以用到JNI中提供的接口函数进行操作

功能:返回对应索引值的object.返回的是一个java数组什么类型元素的值。

功能:用来设置对应索引元素的值

对于java数组什么类型的操作就介绍到这了。

下面看一个简单的例子:

在这个JAVA代码中,定义了一个整形java数组什么类型然后在callback()方法中调用這个java数组什么类型,可以看到java数组什么类型越界了下面演示在C++中如何捕获这个异常。

返回值:返回一个异常对象

功能:清除该异常对象,呮在本线程中传递

功能:抛出一个指定的异常对象和异常信息。

第一行是C++中打印的信息,第二行是从C++中抛出的异常

都注释掉,也会向JAVA中拋出异常这时就没有清除掉异常了。

总之,java数组什么类型的传递与异常在处理在JNI中非常的重要在这里只是简单的介绍一下,欢迎大家共哃学习

我要回帖

更多关于 java数组什么类型 的文章

 

随机推荐