您的位置:首页 > 编程语言 > Java开发

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jni java 方法
相关文章推荐