学习Android Jni时,一个二维 整数 数组的传递花了我好长时间,在网上查的资料都不全,当然最后是成功了,写在这里是为了自己记住,当然有人搜索到并利用了我会很高兴。

 
in Android Java file
public native boolean  add(int[][] qizidata,.....)
用JDK工具生产jni 的*.h文件
your project path> ..Javajdk1.6.0_10binjavah -classpath ./bin JAVA Class name

//**************************************************************************
//二维数组java -》Jni
JNIEXPORT jint JNICALL Java_com_Jung_add
  (JNIEnv * env, jobject
obj, jobjectArray qizidata,jint value1, jint
value2) 
{
    jint
i,j;
    jint
qizi[1024][1024];  //固定数组,测试用
    jarray
myarray;
    int
size = (*env)->GetArrayLength(env, qizidata);
    for (i
= 0; i < size &&
i<1024 ; i++)
    {
    
  myarray =
((*env)->GetObjectArrayElement(env, qizidata,
i));
    
  int col =
 (*env)->GetArrayLength(env,
myarray);
 
    
  jint *coldata =
(*env)->GetIntArrayElements(env, (jintArray)myarray,
0 );
    
  for (j=0; j<col
&& j <1024;
j++) 
    
  {
    
      qizi[i][j]
= coldata[j];
    
  }
    
 
(*env)->ReleaseIntArrayElements(env,
(jintArray)myarray, coldata,0 );
    }
 
    return
(qizi[0][0]+qizi[9][0]);
}

//**************************************************************************
//二维数组Jni -》Java
 
JNIEXPORT jobjectArray JNICALL
Java_com_marakana_NativeLib_GetIntArray
  (JNIEnv *env, jobject obj, jint
x, jint y)
{
  
 jobjectArray ret;
    int i =
0;
    int j =
0;
    jclass
intArrCls = (*env)->FindClass(env, "[I");
    if (
NULL== intArrCls)
    
    return NULL;
 
    ret =
(*env)->NewObjectArray(env, x * y, intArrCls,
NULL);
 
    jint
tmp[1024];//固定数组,测试用,注意别溢出
    for (i
= 0; i < x; i++) {
    
   jintArray intArr =
(*env)->NewIntArray(env,y);
 
    
   for (j = 0; j <
y; j++) {
    
     
 tmp[j] = i + j;
    
   }
 
    
 
(*env)->SetIntArrayRegion(env,intArr, 0, y,
tmp);
    
 
(*env)->SetObjectArrayElement(env,ret, i,
intArr);
    
 
(*env)->DeleteLocalRef(env,intArr);
    }
    return
ret;
}
//**************************************************************************
//下面代码是网上搜的,没验证,忘记出处了,请原作者见谅
// 二维String数组 JNI 提取
 c_languge syntax
JNIEXPORT void JNICALL Java_TestArray_PrintArrays
(JNIEnv *env, jclass class, jobjectArray array)
{
    int
size = (*env)->GetArrayLength(env, array);
    for
(int i = 0; i < size; i++)
    {
    
   jarray myarray =
((*env)->GetObjectArrayElement(env, array,
i));
    
   int leng =
(*env)->GetArrayLength(env, myarray);
    
   printf("length: %dn",
leng);
    
   for (int j = 0; j
< leng; j++)
    
   {
    
     
 jstring string =
((*env)->GetObjectArrayElement(env, myarray,
i));
    
     
 const char * chars =
(*env)->GetStringUTFChars(env, string, 0);
    
     
 printf("%s n", chars);
    
     
 (*env)->ReleaseStringUTFChars(env,
string, chars);
    
   }
    
}
}
 

Android jni 二维数组 传递的更多相关文章

  1. c++ 二维数组传递

    c++ 二维数组传递 我们在传递二维数组时,对于新手来说,可能会存在某些问题,下面讲解几种传递方法 在讲解如何传递二维数组时,先看看如何动态new 二维数组 // 二维数组动态申请 int row , ...

  2. c语言二维数组传递

    c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...

  3. c#二维数组传递与拷贝

    定义 string[,] arr = new string[12, 31] 另一种string[][] ary = new string[5][];相当于一维数组 常量二维数组定义, 用readonl ...

  4. 二维数组的传输 (host <-> device)

    前言 本文的目的很明确:介绍如何将二维数组传递进显存,以及如何将二维数组从显存传递回主机端. 实现步骤 1. 在显存中为二维数组开辟空间 2. 获取该二维数组在显存中的 pitch 值 (cudaMa ...

  5. [zt]C++二维数组讲解、二维数组的声明和初始化

    定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...

  6. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  7. 第六篇:二维数组的传输 (host <-> device)

    前言 本文的目的很明确:介绍如何将二维数组传递进显存,以及如何将二维数组从显存传递回主机端. 实现步骤 1. 在显存中为二维数组开辟空间 2. 获取该二维数组在显存中的 pitch 值 (cudaMa ...

  8. android JNI 一维数组、二维数组的访问与使用

    在JNI中访问JAVA类中的整型.浮点型.字符型的数据比较简单,举一个简单的例子,如下: //得到类名 jclass cls = (*env)->GetObjectClass(env, obj) ...

  9. Android开发实践:Java层与Jni层的数组传递

    转载:http://www.linuxidc.com/Linux/2014-03/97561.htm Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是 ...

随机推荐

  1. static方法调用

    Static方法调用,类名.方法名 int number = Integer.ParseInt(String ); 将字符串参数作为有符号的十进制整数进行解析 将数字解析成字节数组 Character ...

  2. Bing地图切片原理

    Bing地图切片系统 Bing地图提供了一个可以直接平移和缩放的世界地图.为了让地图操作更加平滑和及时响应,我们选择提前渲染地图不同层级的细节,并把每个层级的地图切割成为瓦片以便快速的还原展示.这篇文 ...

  3. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  4. 通过Nginx訪问FastDFS文件系统并进行图片文件裁剪的性能測试和分析

    前段时间公司的分布式图片文件系统(FastDFS)做了图片裁剪和缩放功能,并把缩放计算和FastDFS做了解耦分离,前端用虚拟机作为图片文件缩放的訪问代理层(Nginx Proxy),后端使用ngin ...

  5. C/C++数据类型的转换之终极无惑

    程序开发环境:VS2012+Win32+Debug 数据类型在编程中常常遇到.尽管可能存在风险,但我们却乐此不疲的进行数据类型的转换. 1. 隐式数据类型转换 数据类型转换.究竟做了些什么事情呢?实际 ...

  6. POJ 3368 线段树

    思路: 先统计在第i个位置当前数字已经出现的次数. 维护两个数组,一个是当前位置的数字最后一次出现的位置,另一个是当前位置的数字第一次出现的位置 查找的时候分为两种情况: 没有和边界相交(意会意会)的 ...

  7. android实现自动安装

    安装: String str = "/CanavaCancel.apk"; String fileName = Environment.getExternalStorageDire ...

  8. jq操作属性,元素,样式,事件

    操作属性: 单个 $('选择器').attr('属性名','属性值'); 多个 $('选择器').attr({'属性名':'属性值','':''}); eg: $('#a1').attr('flag' ...

  9. 接口测试工具篇--postman

    上面是postman的主页面,可以输入接口url,设置请求方式(get或post) 下面主要讲一些其他接口测试需要用到的设置Authorization用来设置权限验证的,可以选择权限验证的方式 hea ...

  10. 用AI识别内部人威胁面临的道德规范

    用AI识别内部人威胁面临的道德规范 还记得汤姆·克鲁斯的<少数派报告>吗?人工智能可识别昭示未来风险的员工行为.该如何有效且有道德地使用这一数据呢? 为保护公司网络不受恶意软件.数据渗漏和 ...