我写出了JAVA和C的代码,都没报错,但是结果就是不出来,以下是代码,求找出哪里出错
package com.sundy.jnidemo;
import android.app.Activity;
import android.os.Bundle;
public class ChangeMethodFromJni extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ChangeMethodFromJni changeJni = new ChangeMethodFromJni();
DiskInfo disk = changeJni.getStruct();
System.out.println("name:" + disk.name);
System.out.println("Serial:" + disk.serial);
}
public class DiskInfo {
//名字
public String name;
//序列号
public int serial;
}
public native DiskInfo getStruct();
static {
System.loadLibrary("ChangeMethodFromJni");
}
}
#include "com_sundy_jnidemo_ChangeMethodFromJni.h"
#include "com_sundy_jnidemo_ChangeMethodFromJni_DiskInfo.h"
struct DiskInfo {
char name[256];
int serial;
};
char* jstringToWindows( JNIEnv *env, jstring jstr );
//将windows类型转换成jstring类型
jstring WindowsTojstring( JNIEnv* env, char* str );
JNIEXPORT jobject JNICALL Java_com_sundy_jnidemo_ChangeMethodFromJni_getStruct
(JNIEnv *env, jobject obj)
{
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/ChangeMethodFromJni$DiskInfo");
//获取类中每一个变量的定义
//名字
jfieldID str = (*env)-> GetFieldID(env,objectClass,"name","Ljava/lang/String;");
//序列号
jfieldID ival = (*env)-> GetFieldID(env,objectClass,"serial","I");
//给每一个实例的变量付值
(*env)-> SetObjectField(env,obj,str,(*env)-> NewStringUTF(env,"my name is D:"));
(*env)-> SetShortField(env,obj,ival,10);
return obj;
}