当我使用 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 实现而不是本机实现,那将是相同的,因为变量是原始类型。)您不能直接做您想做的事。
可能的解决方法:
- 使方法 return 成为值而不是无效。
- 创建一个简单的 class,其中包含您要作为成员变量来回传递的整数值。
就其价值而言,我认为像这样带有 "side-effects" 的方法通常被认为是不好的形式,尤其是在 Java 社区中。也许还有另一种方法可以得到你想要的东西?
我是新手,正在使用 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 实现而不是本机实现,那将是相同的,因为变量是原始类型。)您不能直接做您想做的事。
可能的解决方法:
- 使方法 return 成为值而不是无效。
- 创建一个简单的 class,其中包含您要作为成员变量来回传递的整数值。
就其价值而言,我认为像这样带有 "side-effects" 的方法通常被认为是不好的形式,尤其是在 Java 社区中。也许还有另一种方法可以得到你想要的东西?