编译器对语言的转换以寻地址的方式进行序列化和反序列化,因此对于不固定类型或者不显示给出大小的对象不能直接解析,所以没有出现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. PAT 1110 Complete Binary Tree

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...

  2. 【Mail.Ru Cup 2018 Round 2 A】 Metro

    [链接] 我是链接,点我呀:) [题意] [题解] 1:一直往右走的情况. 2:中间某个地方中转 (不会出现超过1次的转弯. (如果超过了和1次是等价的 [代码] #include <bits/ ...

  3. noip模拟赛 楼

    分析:题目可以转化为对于一个数,对它进行x次减法操作,n-x次加法操作,使他变成最小的非负整数.因为每减一次数就会减小,次数是一定的,所以可以二分x,就可以了. #include <cstdio ...

  4. noip模拟赛 幻灯结界

    题目描述59式给你出了一道**题:有n个防御人(守方)还有n个攻击坦克(攻方)每个防御人有护甲a[i],而攻击方每个坦克有火力b[i]如果一个防守方的护甲不小于攻击方的攻击力,就可以防的住然而我们保持 ...

  5. Servlet的HttpServletResponse输出

    了解其中的一些字符设置,PrintWriter输出等.. form.html: <!DOCTYPE html> <html> <head> <title> ...

  6. 【实时文件同步】rsync+inotify-tools的安装与配置

    http://blog.csdn.net/yakson/article/details/52044403

  7. 2015 Changchun Regional

    弱没机会去长春,但拿了题来做了,加上请教各路大牛,理论AC了一发,但没实现~(感谢各路有形无形的大牛的指导) A题~Too Rich 给你1,5,10,20,50,100,200,500,1000,2 ...

  8. iOS学习(3)

    4. 这个写法会出什么问题: @property (copy) NSMutableArray *array; 两个问题:1.加入,删除,改动数组内的元素的时候,程序会由于找不到相应的方法而崩溃.由于 ...

  9. 怎样动态设置GridView的宽和高(Android)

    LinearLayout.LayoutParams linearParams2 = (LinearLayout.LayoutParams)liveGrid.getLayoutParams(); lin ...

  10. [BZOJ 1735] Muddy Fields

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1735 [算法] 二分图最小覆盖 [代码] #include<bits/stdc ...