android jni 结构体_Android——- jni返回结构体-Fun言
1.创建工程,添加jni
2. main.cpp
#include
struct test_data
{
char name[256];
int num;
double average;
};
extern "C" {
JNIEXPORT jobject JNICALL Java_com_re_struct_MainActivity_call(JNIEnv * env, jobject obj, jobject classobj);
};
JNIEXPORT jobject JNICALL Java_com_re_struct_MainActivity_call(JNIEnv * env, jobject obj, jobject classobj)
{
jclass objectClass = env->FindClass("com/re/struct/test_data");
jfieldID name = env->GetFieldID(objectClass, "name", "Ljava/lang/String;");
jfieldID num = env->GetFieldID(objectClass, "num", "I");
jfieldID average = env->GetFieldID(objectClass, "average", "D");
env->SetObjectField(classobj, name, env->NewStringUTF("hello world"));
env->SetIntField(classobj, num, 10);
env->SetDoubleField(classobj, average, 2.5);
return classobj;
}
3. test_data.java
package com.re.struct;
public class test_data {
public String name;
public int num;
public double average;
}
4. MainActivity.java
package com.re.struct;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
static{
System.loadLibrary("main");
}
private native test_data call(test_data data);
private test_data data = new test_data();
private static final String TAG="######";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
data = call(data);
Log.e(TAG, "name:" + data.name);
Log.e(TAG, "num:" + data.num);
Log.e(TAG, "average:" + data.average);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
5. 效果:
6. 补充:
Java类型
符号
boolean
Z
byte
B
char
C
short
S
int
I
long
L
float
F
double
D
void
V
objects对象
Lfully-qualified-class-name; L类名;
Arrays数组
[array-type [数组类型
methods方法
(argument-types)return-type(参数类型)返回类型
android jni 结构体_Android——- jni返回结构体-Fun言相关推荐
- jni java共享变量_Android JNI开发系列(十)JNI访问 Java 实例变量和静态变量
JNI访问 Java 实例变量和静态变量 Java 中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过类名.变量名来访问. ...
- C语言中函数如何返回结构体?
//#include "stdafx.h"//If the vc++6.0, with this line. #include "stdio.h" #inclu ...
- 为什么C语言函数不能返回数组,却可以返回结构体?
C语言函数为什么不能返回数组? 在C语言程序开发中,我们不可以编写下面这样的代码: char f(void)[8] { char ret; // ...fill... return ret; } in ...
- 为什么C语言函数不能返回数组,却可以返回结构体
C语言函数为什么不能返回数组? 在C语言程序开发中,我们不可以编写下面这样的代码: char f(void[8]{ char ret;// ...fill... return ret; }int ma ...
- 关于返回结构体的函数
[前言]写作本文,源于最近回复的 <汇编中函数返回结构体的方法> 一文.在网络上也已经有一些相关文章和相关问题,有的文章已经给出了一部分结果,但总体而言还缺少比较重要的结论.本文以分析 V ...
- c语言返回结构体,(C/C++) 用函数返回一个结构体
方法一: 参数里含有指向指针的指针. 注意:如果函数参数里只有一个指向结构体的指针,是无法正确地返回结构体的值的.原因在于在编译的时候,会对入参p产生一个备份_p. 参考此文:http://www.c ...
- IOS 内购IAP 自动订阅收据验证返回结构体
exclude-old-transactions 参数等于true时. 数据通过json_decode()转换后 1.首次订阅支付通过票据进行验单的返回结构体: Array ([status] =&g ...
- Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1
Android sdk-29版本上使用 jni mkdir创建文件夹失败返回-1 + compileSdkVersion 29buildToolsVersion "29.0.2"d ...
- Android JNI(一)——NDK与JNI基础
前言 ndk开发是高级Android 开发必备的技能,也是很多Android开发工程师难以逾越的门槛,因此,学习ndk开发已经是高级Android必备技能,所以我尝试把自己ndk开发经验记录下来,不知 ...
最新文章
- 关于 android 环信无法正确获取昵称的问题
- 输出200-299之间的所有素数
- 比特币base58源码解析_中本聪源码早期版本流出:区块链原名时间链,比特币内置虚拟扑克游戏...
- 8.类定义、属性、初始化和析构
- ML面试1000题系列(91-100)
- Tomcat系列(4)——Tomcat 组件及架构详细部分
- 安装linux后找不到系统文件夹,安装ubuntu时“没有定义根文件系统”错误
- Tortoise SVN 汉化(官网下载汉化包)
- 微型计算机安装调试维修中级题库,调试维修工中级题库(答案).doc
- Endnotex8 运行时出现错误 unknown error -0xA84c的解决办法
- R语言读取(加载)txt格式数据为dataframe、按照指定字段(数据列)对dataframe进行升序排序(ascending)、返回行索引的位置向量
- 离散数学中关于自反与反自反的通俗解释
- dft中X(K)的k的含义
- 3分钟为你的应用添加声波通讯功能
- 苹果各版本手机更换电池的视频
- Java-AQI计算
- 使用python实现mysql测试数据的准备(大批量导入数据)
- 图解Java数据结构之双向链表
- 泰凌微蓝牙芯片8267 SRAM剩余大小以及是否溢出----分析计算方法
- 学生免费领取、配置阿里云服务器