JNI 从C文件向Java文件传递多个参数
JNI C主函数
#include <jni.h>
#include <string.h>
#include <android/log.h>
#include "Provider.h"
#include "libCold_chain.h" JNIEnv* jniEnv; jint
Java_com_panasonic_communicationtest_StateConfirmFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName )
{
const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} return openSerialDevice(devName_id);
} jint
Java_com_panasonic_communicationtest_StateConfirmFragment_readSerialData( JNIEnv* env, jobject thiz )
{
long dataTest = ; if(jniEnv == NULL) {
jniEnv = env;
} jclass class;
jfieldID send_instruction_record;
jfieldID receive_instruction_record;
class = (*env)->GetObjectClass(env, thiz);
if (class == NULL)
{
return -;
}
send_instruction_record = (*env)->GetFieldID(env, class, "send_instruction_str", "Ljava/lang/String;");
receive_instruction_record = (*env)->GetFieldID(env, class, "receive_instruction_str", "Ljava/lang/String;");
if (send_instruction_record == NULL || receive_instruction_record == NULL)
{
return -;
} unsigned char* rcmdReq = malloc(*sizeof(jchar));
unsigned char* rcmdRes = malloc(*sizeof(jchar)); if(readSerialData(, , , &dataTest, , rcmdReq, rcmdRes) == ){ unsigned char* str1 = "hello fan sen!";
unsigned char* str2 = rcmdReq; jstring jstr1 = (*env)->NewStringUTF(env, str1);
jstring jstr2 = (*env)->NewStringUTF(env, str2);
__android_log_print(ANDROID_LOG_INFO, "ComTest", rcmdReq);
if(jstr1 == NULL || jstr2 == NULL){
return ;
}
(*env)->SetObjectField(env, thiz, send_instruction_record, jstr1);
(*env)->SetObjectField(env, thiz, receive_instruction_record, jstr2); return dataTest;
} return -;
} jint
Java_com_panasonic_communicationtest_StateConfirmFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd )
{
if(jniEnv == NULL) {
jniEnv = env;
} return closeSerialDevice(devFd);
} // ===========================================
jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_openSerialDevice( JNIEnv* env, jobject thiz, jstring devName )
{
const char* devName_id = (*env)->GetStringUTFChars(env, devName, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} return openSerialDevice(devName_id);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_readSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data )
{
if(jniEnv == NULL) {
jniEnv = env;
} unsigned char rcmdReq[];
unsigned char rcmdRes[]; return readSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_writeSerialData( JNIEnv* env, jobject thiz, jint devFd, jchar unitno, jshort addr, jlong data )
{
if(jniEnv == NULL) {
jniEnv = env;
} unsigned char rcmdReq[];
unsigned char rcmdRes[]; return writeSerialData(devFd, unitno, addr, data, , rcmdReq[], rcmdRes[]);
} jint
Java_com_panasonic_communicationtest_ParameterSettingFragment_closeSerialDevice( JNIEnv* env, jobject thiz, jint devFd )
{
if(jniEnv == NULL) {
jniEnv = env;
} return closeSerialDevice(devFd);
} //--------------------------------------
jstring
Java_com_panasonic_communicationtest_StateConfirmFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
} // return getString(address_id);
return (*env)->NewStringUTF(env, address_id);
} jstring
Java_com_panasonic_communicationtest_ParameterSettingFragment_getStringFromJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
}
return getString(address_id);
} jstring
Java_com_panasonic_communicationtest_ParameterSettingFragment_setStringIntoJNI( JNIEnv* env, jobject thiz, jstring address )
{
const char* address_id = (*env)->GetStringUTFChars(env, address, NULL);
if(jniEnv == NULL) {
jniEnv = env;
}
return setString(address_id);
}
JNI C代码
extern long readSerialData(long devFd, unsigned char unitno, unsigned short addr, long *data, long timeout, unsigned char* rcmdReq, unsigned char* rcmdRes)
{
/*
* Test by fansen
*/ *data = ;
int m = ;
int n = ;
unsigned char test[] = ""; //{0xff,0x1f,0x07,0x08};
strcpy(rcmdReq, test); // rcmdReq = test;
// for(m = 0; m <= 8; m++){
// rcmdReq[m] = test[m];
// LOGI("test1: %c", test[m]);
// } LOGI(rcmdReq); // char test2[10] = {0xff,0x1f,0x07,0x08,0x00,0x87,0x00,0x01};
// __android_log_print(ANDROID_LOG_INFO, "ComTest", "Communication Test 2");
// for(n = 0; n <= 9; n++){
// rcmdReq[n] = test2[n];
// } return OK; /*
* Test over
*/
JNI 从C文件向Java文件传递多个参数的更多相关文章
- jni.h头文件详解二
作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...
- jni.h头文件详解一
1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...
- 【转】 jni.h头文件详解(二)
原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...
- JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常 java.lang.UnsatisfiedLinkError: XXXclass. ...
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
1. 在Android的Java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121 在JN ...
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...
- JNI通过线程c回调java层的函数
1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...
- Linux学习心得之 jnlp的文件和java应用程序安全设置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...
- 使用XML文件和Java代码控制UI界面
Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...
随机推荐
- 【转】使用PHP创建基本的爬虫程序
Web Crawler, 也时也称scrapers,即网络爬虫,用于自动搜索internet并从中提取 想要的内容.互联网的发展离不开它们.爬虫是搜索引擎的核心,通过智能算法发现符合 你输入的关键字的 ...
- jquery上传插件uploadify 报错http error 302 解决方法之一
前段时间用到jquery上传插件uploadify时,始终出现系统报出 http error 302 的错误. 网上大量搜集信息,基本上都是说session值丢失的问题,根据网友提供的解决方案进行修改 ...
- jquery api 笔记(2) 事件 事件对象
事件 #1.resize() 缩放窗体:window.resizeTo(width, height); 并不是兼容做法. #2 .scroll() ->获取滚动条的位置: .scro ...
- php 加载函数 __autoload(), spl_autoload_register()
来自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html spl_autoload_register (PHP 5 >= ...
- PHPUnit初试
先测试了一下加减,检查一下环境,又调用函数测试了服务器名. 源代码: class DemoController extends \Think\Controller { /** * @assert (5 ...
- mvc中的OutputCache
mvc4中有一个标记属性OutputCache,用来对ActionResult结果进行缓存,如何理解呢?概括地说,就是当你的请求参数没有发生变化时,直接从缓存中取结果,不会再走服务端的Action代码 ...
- An easy way to syncTime using C#
/* * Created by SharpDevelop. * User: Administrator * Date: 2013/10/23 * Time: 8:57 * author zibet * ...
- (转载)StringGrid常用属性和常用操作
Delphi StringGrid常用属性和常用操作 StringGrid组件用于建立显示字符串的网格,与电子表格相似.它可使表格中的字符串和相关对象操作简单化.StringGrid组件提供了许多可控 ...
- python数据库操作之pymysql模块和sqlalchemy模块(项目必备)
pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...
- Docker入门
-----------------------------------------Docker入门教程(一)介绍Docker入门教程(二)命令Docker入门教程(三)DockerFileDocker ...