当我使用 public 本机 void 函数时如何更改 activity 中的 int 值

How to change int value in activity when I use public native void function

我是新手,正在使用 Eclipse 开发 Android 应用程序。 我有一个使用 JNI 的 android 项目。

但是我有一个问题,我现在无法解决。 当我使用 public 原生 void 函数时如何更改 activity 中的 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 值,并在 activity 的文本中显示它。

在运行代码之后,文本结果仍然是100作为初始值,而不是20。

我用谷歌搜索了很多文章并尝试过,但失败了。

如果有人能提供帮助,我将不胜感激。提前致谢。

值没有改变,因为 JNI 代码中的 width 变量是按值而不是按引用传递的。 (在这种情况下,如果您有一个 Java 实现而不是本机实现,那将是相同的,因为变量是原始类型。)您不能直接做您想做的事。

可能的解决方法:

  1. 使方法 return 成为值而不是无效。
  2. 创建一个简单的 class,其中包含您要作为成员变量来回传递的整数值。

就其价值而言,我认为像这样带有 "side-effects" 的方法通常被认为是不好的形式,尤其是在 Java 社区中。也许还有另一种方法可以得到你想要的东西?