C代码如下
#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");
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V"); 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, newObj);
}
//返回object数组
return args;
} 但是结果出不来,求指正!
#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");
//给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
//获取类中每一个变量的定义
//名字
jmethodID init = (*env)->GetMethodID(env, objectClass , "<init>", "(Ljava/lang/String;I)V"); 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, newObj);
}
//返回object数组
return args;
} 但是结果出不来,求指正!
解决方案 »
- 两个Activity之间怎么传递List<Map<String,Object>>型数据,谢谢
- 求助,如何获得Google Map API key?
- 如何操作apk里的数据库
- android小程序在eclipse上没有错误提示,在模拟器上运行时出错了
- android怎么实现接收充电广播
- [武汉]下周就要比赛了,产品的服务器与数据库也开发的差不多了,可是就是找不到一个做客户端开发的。。。
- 【诚心请教】Android超时导致数据与服务器不同步
- 请问这种效果如何实现?
- android listview滚动加载数据问题
- hbuilder打包的apk点击返回会直接退出应用
- 求助:如何将系统时间也归入恢复出厂设置中
- 点击一个 imageView 按纽,出现 拍照 图片 这二个的入口,在线等
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);
System.out.println("------------------返回一个结构数组 -----------");
CMFJ changeJni = new CMFJ();
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);
}
}
}
尝试下通过byte数组方式返回,C++里面的结构内容转成byte数组,java代码里面再解析出来。
如果是后者的话,会比较麻烦,建议LZ换一种思路考虑吧。。