package com.sundy.jnidemo;import android.app.Activity;
import android.os.Bundle;
import java.lang.*;
public class CMFJ extends Activity {
/** Called when the activity is first created. */
static {
System.loadLibrary("CMFJ");
} public native DiskInfo[] getStructArray(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CMFJ changeJni = new CMFJ();
System.out.println("------------------返回一个结构数组 -----------");
DiskInfo[] diskList = changeJni.getStructArray();
int i;
for ( i = 0; i < diskList.length; i++) {
System.out.println("name:" + diskList[i].name);
System.out.println("Serial:" + diskList[i].serial);
} }
}
package com.sundy.jnidemo;
public class DiskInfo
{
//名字
public String name;
//序列号
public int serial; //定义构造函数
DiskInfo(String name, int serial)
{
this.name = name;
this.serial = serial;
}
}
#include <stdio.h>
#include <math.h>
#include "jni.h"
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
#pragma comment (lib,"BaseInfo.lib")
#pragma comment (lib,"jvm.lib")
#include "com_sundy_jnidemo_CMFJ.h"#include "com_sundy_jnidemo_DiskInfo.h"
struct {
char str[256];
int serial;
} DiskInfo;char* jstringToWindows( JNIEnv *env, jstring jstr );
//将windows类型转换成jstring类型
jstring WindowsTojstring( JNIEnv* env, char* str );
//主函数 JNIEXPORT jobjectArray JNICALL Java_com_sundy_jnidemo_CMFJ_getStructArray
(JNIEnv *env, jobject _obj)
{
//申明一个object数组
jobjectArray args = 0;
//数组大小
jsize len = 5;
//获取object所属类,一般为ava/lang/Object就可以了
jclass objClass = (*env)->FindClass(env,"java/lang/Object");
//新建object数组
args = (*env)->NewObjectArray(env,len, objClass, 0);
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/DiskInfo");
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V");
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
int i;
for( i=0; i < len; i++ )
{
//给每一个实例的变量付值
jobject newObj = (*env)->NewObject(env, objectClass, init, (*env)->NewStringUTF(env, "my name is D:"), 10);
//添加到objcet数组中
(*env)->SetObjectArrayElement(env,args, i, _obj);
}
//返回object数组
return args;
}
无报错,但是结果不错来,求解决!
import android.os.Bundle;
import java.lang.*;
public class CMFJ extends Activity {
/** Called when the activity is first created. */
static {
System.loadLibrary("CMFJ");
} public native DiskInfo[] getStructArray(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CMFJ changeJni = new CMFJ();
System.out.println("------------------返回一个结构数组 -----------");
DiskInfo[] diskList = changeJni.getStructArray();
int i;
for ( i = 0; i < diskList.length; i++) {
System.out.println("name:" + diskList[i].name);
System.out.println("Serial:" + diskList[i].serial);
} }
}
package com.sundy.jnidemo;
public class DiskInfo
{
//名字
public String name;
//序列号
public int serial; //定义构造函数
DiskInfo(String name, int serial)
{
this.name = name;
this.serial = serial;
}
}
#include <stdio.h>
#include <math.h>
#include "jni.h"
#include <stdio.h>
#include "stdlib.h"
#include "string.h"
#pragma comment (lib,"BaseInfo.lib")
#pragma comment (lib,"jvm.lib")
#include "com_sundy_jnidemo_CMFJ.h"#include "com_sundy_jnidemo_DiskInfo.h"
struct {
char str[256];
int serial;
} DiskInfo;char* jstringToWindows( JNIEnv *env, jstring jstr );
//将windows类型转换成jstring类型
jstring WindowsTojstring( JNIEnv* env, char* str );
//主函数 JNIEXPORT jobjectArray JNICALL Java_com_sundy_jnidemo_CMFJ_getStructArray
(JNIEnv *env, jobject _obj)
{
//申明一个object数组
jobjectArray args = 0;
//数组大小
jsize len = 5;
//获取object所属类,一般为ava/lang/Object就可以了
jclass objClass = (*env)->FindClass(env,"java/lang/Object");
//新建object数组
args = (*env)->NewObjectArray(env,len, objClass, 0);
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/DiskInfo");
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V");
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
int i;
for( i=0; i < len; i++ )
{
//给每一个实例的变量付值
jobject newObj = (*env)->NewObject(env, objectClass, init, (*env)->NewStringUTF(env, "my name is D:"), 10);
//添加到objcet数组中
(*env)->SetObjectArrayElement(env,args, i, _obj);
}
//返回object数组
return args;
}
无报错,但是结果不错来,求解决!
解决方案 »
- 如何判断手机wifi连接一个AP已经完成
- 请教高手关于Bitmap的copy()问题
- 求救,关于OPenGL ES2.0 不支持ESContext类型。
- Menu.add之后,点Menu菜单,程序就强制退出了。求原因
- 能否实现在wifi连接建立的时候启动一个进程?
- 具体如何判断是否非系统应用呢????求大神赐教。。。
- 准备做个轮播图效果。。哪位大神给个Demo
- 关于viewpager和ontouch的滑动冲突,望大神给个完美解决方案
- Listview亮度显示的问题
- 关于BItmap.createScaledBitmap释放内存引发的bug
- *(100分)小弟是新手,请教各位大大,android拦截彩信怎么做???
- 关于JNI调用返回结构体的问题!请教一下!
已改为(*env)->SetObjectArrayElement(env,args, i, newObj);