学习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);
    
   }
    
}
}
 

最新文章

  1. 在网站开发中很有用的8个 jQuery 效果【附源码】
  2. Werewolf流程分析
  3. Android中的ANR
  4. KBMMW 4.93.10 win64 一个BUG 修正
  5. 30分钟groovy快速入门并掌握(ubuntu 14.04+IntelliJ 13)
  6. ecshop后台增加模板页的方法
  7. 如何将character_set_database latin1 改为 gbk(转)
  8. php in_array比较原理和类型比较问题
  9. 未能加载文件或程序集“xxxx”或它的某一个依赖项
  10. hackyviewpager有什么用
  11. 《前端之路》之 Babel 下一代 JavaScript 语法编译器
  12. Linux系统下如何运行.sh文件
  13. MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
  14. HDU-1260.Tickets(简单线性DP)
  15. MySQL Workbench导出Model提示[&#39;ERROR 1064 (42000): You have an error in your SQL syntax....syntax to use near &#39;VISIBLE&#39;]
  16. HDU 1176 免费馅饼 (动态规划)
  17. js 将图片连接转换称base64格式
  18. 洛谷.1110.[ZJOI2007]报表统计(Multiset)
  19. Intellij idea 2017 图标含义
  20. Linux关键字查询

热门文章

  1. spring mvc过滤器filter
  2. Sublime Text 3 添加到右键菜单
  3. linux 命令 xxd
  4. pip安装selenium时提示Unknown or unsupported command &#39;install&#39;
  5. HDU 2841 Visible Trees(容斥定理)
  6. 外面的wifi非常精彩,外面的wifi非常不安
  7. Educational Codeforces Round 6 A. Professor GukiZ&#39;s Robot 水
  8. MongoDB数据修改案例
  9. kibana智能检索发送多次_msearch —— 配置index pattern,同时设置时间段,就知道到底是在哪些索引里去查找数据了
  10. rails数据库操作rake db一点心得