我在Java类中有一个名为getCurrValue()
package com.my;
public class MyClass {
public static long value = 5L;
public static long getCurrValue(){
return value;
}
}
我在本地c / c ++代码中有一个名为useValue(JNIEnv* env)
的方法。
当我尝试使用Java静态方法getCurrValue()
来获取本地c / c ++代码中的value
时,我总是得到0L
- 为什么?
void useValue(JNIEnv* env) {
jclass clazz = env->FindClass("com/my/MyClass");
jlong result = -1L;
jmethodID get_curr_value_method_id = env->GetStaticMethodID(clazz,"getCurrValue","()J");
result = env->CallStaticLongMethod(clazz,get_curr_value_method_id);
// the result is 0L
}
答案 0 :(得分:1)
我使用原生方法和使用Android 6.0的Nexus 9测试了此代码,并且它运行良好。
jstring Java_it_stefanocappa_ndkexample_Example_stringFromJNI( JNIEnv* env, jobject thiz ) {
jclass clazz = (*env)->GetObjectClass(env, thiz);
jmethodID staticMethodId1;
staticMethodId1 = (*env)->GetStaticMethodID(env, clazz, "getCurrValue", "()J");
jlong staticMethodResult2;
staticMethodResult2 = (jlong) (*env)->CallStaticLongMethod(env, clazz, staticMethodId1);
return (*env)->NewStringUTF(env, "Hello from JNI);
}
如果您对我的回答不满意,请写信,我将发布完整的全部工作示例;)
按建议更新:
我在Github上更新了一个项目,这是几个月前我意识到的。
存储库:https://github.com/Ks89/NdkExample_AndroidStudio
Look" example.c"第155-166行。
显然,在这个例子中还有其他功能。