从Java发送到JNI的参数未被发送

时间:2014-08-01 22:24:53

标签: java android java-native-interface

我已经了解了如何将参数从Java发送到JNI函数。我首先尝试发送一个ArrayList,因为我试图获取Android电话簿。

在遇到很多问题后,我很容易确保发送一个简单的参数(String)。

这是我的函数Java声明:

public static native void nativeCallback(String params);

这是JNI函数:

JNIEXPORT void JNICALL
Java_example_nativeCallback(JNIEnv*  env,jstring params)

我检查并正在调用该函数。我用它来查看是否实际发送了一个String:

int sizeOfChain = env->GetStringLenght(params);
std::ostringstream convert;
convert<<sizeOfChain;
convert.flush();
std::string finalString = convert.str();

打印 finalString 时,它为0。

这是从Java调用函数的方式:

nativeCallback("TEST_STRING");

另外,发送ArrayList作为jobjectArray有效吗?

1 个答案:

答案 0 :(得分:1)

尝试这样做以从jstring

获取C字符串
const char *str= env->GetStringUTFChars(params, NULL);

printf("String: %s\n", str);

env->ReleaseStringUTFChars(params, str);