我是新手,并使用Eclipse开发Android应用。 我有一个使用JNI的android项目。
但我有一个问题,我现在无法解决。 当我使用public native void function时如何更改活动中的int值?
我的代码如下,
ImageActivity.java
int width = 100, height = 0;
public native void FindFeatures(long matRgba1, long matRgba2, long matRgba3, int width, int height);
FindFeatures(M1.getNativeObjAddr(), M2.getNativeObjAddr(), M3.getNativeObjAddr(), width, height);
String ch = ""+ width;
t.setText(ch);
jin_part.cpp
extern "C" {
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_ImageActivity_FindFeatures(JNIEnv*, jobject, jlong Rgba1, jlong Rgba2, jlong Rgba3, jint width, jint height);
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_ImageActivity_FindFeatures(JNIEnv*, jobject, jlong Rgba1, jlong Rgba2, jlong Rgba3, jint width, jint height)
{
width = 20;
}
}
我想更改JNI中的with值,并将其显示在活动文本中。
运行代码后,文本结果仍然是100作为初始值,而不是20。
我搜索了许多文章并试过,但失败了。
如果有人可以提供帮助,我将非常感谢您的帮助。提前谢谢。
答案 0 :(得分:3)
值不会发生变化,因为JNI代码中的width
变量是按值传递的,而不是通过引用传递的。 (在这种情况下,如果您使用Java实现而不是本机实现,那将是相同的,因为该变量是基本类型。)您不能直接执行您想要的操作。
可能的解决方法:
对于它的价值,我认为方法有"副作用"像这样通常被认为是糟糕的形式,特别是在Java社区。也许还有另一种方法可以得到你想要的东西吗?