JNI 获取成员变量与方法
2017-01-16 11:33
239 查看
1、C获得Java的静态成员变量
java层:
public class JNIMethod {
static {
System.loadLibrary("jnilib");
}
public static MyRoboGuice mainActivity;
public static int IntAge=28;
public String NAME="willdang";
private static String PWD="123456";
public static String StringID="willdang";
public static int IntID=1000;
public static double DoubleID=10000.00; //静态成员变量
public static float FloatID= (float) 1.00;
public static boolean BooleanID=true;
public native String getString();
public native int getInteger();
public native boolean getBoolean();
public native double getDouble();
public native float getFloat();
public native String getStringMethod();
public native int getIntegerMethod();
public native boolean getBooleanMethod();
public native double getDoubleMethod();
public native float getFloatMethod();
public static int getAge(){
Toast.makeText(mainActivity,"call getAge(): "+ IntAge,Toast.LENGTH_LONG).show();
return IntAge;
}
public static void test(){
// Log.i("JNIMethod: ","call test()");
Toast.makeText(mainActivity,"call test()",Toast.LENGTH_LONG).show();
}
//被调用的静态方法
public static String getPwd(String pwd){
PWD=pwd;
Toast.makeText(mainActivity,"call getPwd(): "+ PWD,Toast.LENGTH_LONG).show();
return PWD;
}
}
C层:
JNIEXPORT jdouble JNICALL Java_zdang_com_jnidemo_JNIMethod_getDoubleMethod
(JNIEnv *env, jobject obj){
jclass clazz = env->GetObjectClass(obj);
jfieldID id=env->GetStaticFieldID(clazz,"DoubleID","D"); //类句柄 成员名 成员类型签名
jdouble d=env->GetStaticDoubleField(clazz,id);
return d;
}
2、C调用Java的静态方法
Java层同上
C层:
JNIEXPORT jstring JNICALL Java_zdang_com_jnidemo_JNIMethod_getStringMethod
(JNIEnv *env, jobject obj){
jclass clazz = env->GetObjectClass(obj);
jmethodID id = env->GetStaticMethodID(clazz,"getPwd","(Ljava/lang/String;)Ljava/lang/String;"); //句柄 方法名 方法类型签名
jstring newPwd=env->NewStringUTF("111111");
jobject job=env->CallStaticObjectMethod(clazz,id,newPwd); //非基础类型先获得jobject再转换成对应的类型
return (jstring)job;
}
java层:
public class JNIMethod {
static {
System.loadLibrary("jnilib");
}
public static MyRoboGuice mainActivity;
public static int IntAge=28;
public String NAME="willdang";
private static String PWD="123456";
public static String StringID="willdang";
public static int IntID=1000;
public static double DoubleID=10000.00; //静态成员变量
public static float FloatID= (float) 1.00;
public static boolean BooleanID=true;
public native String getString();
public native int getInteger();
public native boolean getBoolean();
public native double getDouble();
public native float getFloat();
public native String getStringMethod();
public native int getIntegerMethod();
public native boolean getBooleanMethod();
public native double getDoubleMethod();
public native float getFloatMethod();
public static int getAge(){
Toast.makeText(mainActivity,"call getAge(): "+ IntAge,Toast.LENGTH_LONG).show();
return IntAge;
}
public static void test(){
// Log.i("JNIMethod: ","call test()");
Toast.makeText(mainActivity,"call test()",Toast.LENGTH_LONG).show();
}
//被调用的静态方法
public static String getPwd(String pwd){
PWD=pwd;
Toast.makeText(mainActivity,"call getPwd(): "+ PWD,Toast.LENGTH_LONG).show();
return PWD;
}
}
C层:
JNIEXPORT jdouble JNICALL Java_zdang_com_jnidemo_JNIMethod_getDoubleMethod
(JNIEnv *env, jobject obj){
jclass clazz = env->GetObjectClass(obj);
jfieldID id=env->GetStaticFieldID(clazz,"DoubleID","D"); //类句柄 成员名 成员类型签名
jdouble d=env->GetStaticDoubleField(clazz,id);
return d;
}
2、C调用Java的静态方法
Java层同上
C层:
JNIEXPORT jstring JNICALL Java_zdang_com_jnidemo_JNIMethod_getStringMethod
(JNIEnv *env, jobject obj){
jclass clazz = env->GetObjectClass(obj);
jmethodID id = env->GetStaticMethodID(clazz,"getPwd","(Ljava/lang/String;)Ljava/lang/String;"); //句柄 方法名 方法类型签名
jstring newPwd=env->NewStringUTF("111111");
jobject job=env->CallStaticObjectMethod(clazz,id,newPwd); //非基础类型先获得jobject再转换成对应的类型
return (jstring)job;
}
相关文章推荐
- JNI编程参考备忘----成员变量和方法
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
- javaBean的概述和规范;BeanUtils的概述;BeanUtils的常用方法:获取类的字节码文件;通过类的构造方法获取成员变量;暴力访问 setAccessible(true)
- android 获取某个class里的所有成员变量和静态变量的名称方法
- Java笔记——利用反射机制获取成员变量及成员方法
- 反射_通过反射获取成员变量、构造方法、成员方法的使用
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- java反射2-获取构造方法、成员变量、成员方法
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- runtime获取查看内部成员变量(OC和Swift两种方法获取)
- iOS - Runtime 获取属性列表 方法列表 成员变量列表 协议列表
- Java SE练习 - 反射获取对象构造方法、成员变量、成员方法
- iOS运行时获取对象的成员变量和成员方法
- java反射之获取方法,成员变量,构造方法
- java反射,获取类的方法,成员变量,构造函数信息
- Java学习提要——"反射"获取方法信息(成员函数、成员变量 、构造函数)
- (一)获取类的三种方式,根据类获取成员变量,成员方法,直接实现的接口,自己的构造方法,直接的父类
- 反射(三)之通过反射获取构造方法, 成员变量, 成员方法
- 反射机制的概述和字节码对象的获取,通过反射获取构造方法并使用;通过反射获取成员变量并使用;通过反射获取私有成员变量并使用;通过反射获取成员方法并使用
- iOS运行时获取对象的成员变量和成员方法