编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现jstringArray这样的类型,只能一个一个编写。

参考链接:安卓开发提高篇-Jarray

1.使用的C++函数

//调用标定相机的函数!wishchin !!!
int CFrameProcess::CamCabPro(
std::vector<std::string> &filenames,
Mat &intrinsic_Mat, Mat &disCoeff,
Mat &object_points, Mat &axis)
{
vector<Mat> inputFrames;
for (int i=0;i< filenames.size();++i)
{
Mat t = cv::imread(filenames[i].c_str(),1);
inputFrames.push_back(t);
} camCalib myCamCalib;
MyCamera cam;
bool isDetected = myCamCalib.cameraCab(inputFrames , cam); intrinsic_Mat = cam.intrinsic_Mat.clone() ;
disCoeff = cam.disCoeff.clone() ;
object_points = cam.object_pointsM.clone() ;
axis = cam.axisM.clone() ; return isDetected;
}

2.JNI接口函数

extern "C" jint
Java_com_example_feeljulygpsmap_FeelJulyActivity_trackInitParamS
(JNIEnv *jenv, jclass
,jobject thiz
,jstring file0
,jstring file1
,jstring file2
,jstring file3
,jstring file4
,jstring file5
,jstring file6
,jstring file7
,jstring file8
,jstring file9
,jstring file10
,jlong intrinsic_Mat,jlong disCoeff,jlong object_pointsM ,jlong axisM
)
{
std::vector<std::string> filenames(11); string stdFileName="";
jStr2StdStr(jenv, file0,stdFileName);
filenames[0]=stdFileName;
jStr2StdStr(jenv, file1,stdFileName);
filenames[1]=stdFileName;
jStr2StdStr(jenv, file2,stdFileName);
filenames[2]=stdFileName;
jStr2StdStr(jenv, file3,stdFileName);
filenames[3]=stdFileName;
jStr2StdStr(jenv, file4,stdFileName);
filenames[4]=stdFileName;
jStr2StdStr(jenv, file5,stdFileName);
filenames[5]=stdFileName;
jStr2StdStr(jenv, file0,stdFileName);
filenames[6]=stdFileName;
jStr2StdStr(jenv, file7,stdFileName);
filenames[7]=stdFileName;
jStr2StdStr(jenv, file8,stdFileName);
filenames[8]=stdFileName;
jStr2StdStr(jenv, file9,stdFileName);
filenames[9]=stdFileName;
jStr2StdStr(jenv, file10,stdFileName);
filenames[10]=stdFileName; ((CFrameProcess*)thiz)->CamCabPro(
filenames,
*((Mat*)intrinsic_Mat) , *((Mat*)disCoeff) ,
*((Mat*)object_pointsM) , *((Mat*)axisM) ); return 1;
}

转换函数:

inline void jStr2StdStr(JNIEnv *jenv, jstring SSrc,std::string SDst)
{
const char* jnamestr = jenv->GetStringUTFChars(SSrc, NULL);
string stdFileName(jnamestr);
SDst =stdFileName; }

3.Java层的定义和调用

调用:

    @SuppressLint("SdCardPath")
private int trackInitParamJ(CamParam mCamParam,Vector<String> filenames)
{
//使用java初始化,读取文件!
//trackInitParam(mCamParam);
filenames.add(0,"/sdcard/DevCv/Picture/209.jpg");
filenames.add(1,"/sdcard/DevCv/Picture/240.jpg");
filenames.add(2,"/sdcard/DevCv/Picture/287.jpg");
filenames.add(3,"/sdcard/DevCv/Picture/300.jpg");
filenames.add(4,"/sdcard/DevCv/Picture/339.jpg");
filenames.add(5,"/sdcard/DevCv/Picture/356.jpg");
filenames.add(6,"/sdcard/DevCv/Picture/371.jpg");
filenames.add(7,"/sdcard/DevCv/Picture/404.jpg");
filenames.add(8,"/sdcard/DevCv/Picture/414.jpg");
filenames.add(9,"/sdcard/DevCv/Picture/743.jpg");
filenames.add(10,"/sdcard/DevCv/Picture/761.jpg"); trackInitParamS(
mNativeObjCvT
,filenames.get(0)
,filenames.get(1)
,filenames.get(2)
,filenames.get(3)
,filenames.get(4)
,filenames.get(5)
,filenames.get(6)
,filenames.get(7)
,filenames.get(8)
,filenames.get(9)
,filenames.get(10)
,mCamParam.intrinsic_Mat.getNativeObjAddr()
,mCamParam.disCoeff.getNativeObjAddr()
,mCamParam.object_pointsM.getNativeObjAddr()
,(mCamParam.axisM).getNativeObjAddr()
); return 1;
}

定义:

    private static native long trackInitParamS(
long thiz
,String file0
,String file1
,String file2
,String file3
,String file4
,String file5
,String file6
,String file7
,String file8
,String file9
,String file10
,long intrinsic_Mat, long disCoeff, long object_pointsM , long axisM );

JNI传递字符串数组J-StringArray的更多相关文章

  1. JNI 中文字符串传递(转)

    源:JNI 中文字符串传递 因为项目编码中通过JNI传递中文字符时出现乱码问题,特搜集了相关资料,整理如下: java内部是使用16bit的unicode编码(UTF-16)来表示字符串的,无论中文英 ...

  2. Java层与Jni层的数组传递(转)

    源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的S ...

  3. JNI C创建Java字符串数组

    创建Java字符串数组 注:jni中没有与String[]对应的数据类型,所以需要创建对象数组,循环添加jstring对象 #include <Sample3.h> #include &l ...

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

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

  5. Android JNI 传递对象

    JNI初步入门后,在传递数据的时候,遇到一个需求:有多个数据需要在Java与C代码之间进行传递.如果都做为函数参数传入,则函数很长很难看,并且多个数据的返回也不好实现.所以想到了把数据打包后传递.这在 ...

  6. java求字符串数组交集、并集和差集

    import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Ma ...

  7. .net字符串数组查找方式效率比较

    下面是代码: static void Main(string[] args) { string[] arr = new string[] { "AAA", "BBBB&q ...

  8. 随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里

    JS /* * 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里 * @id 要插入到DOM元素的ID * * 输入值为图片URL 字符串 * */ function addImages(i ...

  9. js 字符串分割成字符串数组 遍历数组插入指定DOM里 原生JS效果

    使用的TP3.2 JS字符串分割成字符串数组 var images='{$content.pictureurl} ' ;结构是这样 attachment/picture/uploadify/20141 ...

随机推荐

  1. redis 初学

    1.网站:http://redis.cn/ 2.下载安装和配置 http://www.tuicool.com/articles/aQbQ3u 3.简述redis http://www.jb51.net ...

  2. NandFlash、NorFlash、DataFlash

    1. NandFlash和NorFlash        Flash存储芯片,俗称闪存,因其具有非易失性.可擦除性.可重复编程及高密度.低功耗等特点,广泛地应用于手机.数码相机.笔记本电脑等产品.   ...

  3. Xmemcached使用之与Spring整合

    转自:http://hi.baidu.com/tjbaso/item/22f3c32b062ebefb50fd87b8 1 简介Xmemcached是一个高性能的基于java nio的memcache ...

  4. RDS for MySQL查询缓存 (Query Cache) 的设置和使用

    https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 ( ...

  5. ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient

    简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方: 使用长连接: sanboxserver是无用的,调试时直接用"gateway.push.apple.com" ...

  6. HDU 4533

    一道好题.想了好久没想出来,只是觉得总要二分独立处理矩形.感觉自己在把问题转化为数学公式以及分解问题的方面的能力很不足. http://blog.csdn.net/wh2124335/article/ ...

  7. 切换到android studio遇到的svn问题

    眼下的android studio 2.0(包括preview版)都已经把git.svn,cvs 等工具集成进来了.所以,我们仅仅须要依据代码server选择使用就可以. 这里以开源中国上的git私有 ...

  8. WEB开发面试题

    1.HTML的全称:   2.HTML的结构:   3.经常使用标签:                   4.CSS的全称: 5.CSS的作用:   6.CSS中创建Class的语法:        ...

  9. 《JAVA程序设计》实训第一天——《猜猜看》游戏

    课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...

  10. POJ 2375 Cow Ski Area(强连通)

    POJ 2375 Cow Ski Area id=2375" target="_blank" style="">题目链接 题意:给定一个滑雪场, ...