Android上的JNI:如何从Java代码中检索字符串?

Android上的JNI:如何从Java代码中检索字符串?,第1张

概述我读了很多例子来检索C/C++代码中的java字符串,但似乎我错过了一些东西.这个简单的代码不起作用..在ActivityTest(android java代码)我有:public static native void nativeInit(String stringfromjava); 在TestActivity中,我:ActivityTest.nativ

我读了很多例子来检索C/C++代码中的java字符串,但似乎我错过了一些东西.这个简单的代码不起作用..

在ActivityTest(androID java代码)我有:

public static native voID nativeInit(String stringfromjava);

在TestActivity中,我:

ActivityTest.nativeInit("test");

在我的test-jni.c中:

JNIEXPORT voID JNICALL  Java_com_test_jni_ActivityTest_nativeInit(jnienv* env,jclass cls,jobject obj,Jstring stringfromjava){__androID_log_print(ANDROID_LOG_INFO,"TESTJNI","Native Init started");const char* w_buf = (*env)->GetStringUTFChars(env,stringfromjava,0);if(w_buf == NulL) {    __androID_log_print(ANDROID_LOG_INFO,"file path recv nothing");}else {        __androID_log_print(ANDROID_LOG_INFO,"String: %s",w_buf);}(*env)->ReleaseStringUTFChars(env,w_buf);}

但在我的logcat中我只得到:

I/TESTJNI (18921): Native Init startedI/TESTJNI (18921): String: 

哪里我错了……?

固定
感谢Mario,从签名中删除“jobject obj”修复了我的问题!最佳答案到目前为止只写了一个简短的测试(类似于你的程序),但是我的函数有一些不同的签名(可能取决于SDK / NDK / JDK版本?从我找到的一些教程代码中取得它):

extern "C" voID Java_com_whatever_Activity_method(jnienv* env,jobject jthis,Jstring param);

如果你不写C,显然你不需要extern“C”.

Java签名将是:

native voID method(String param);

编辑:

要获取字符串(不确定这是否100%正确,但它有效):

const char *cparam = env->GetStringUTFChars(param,0);// .. do something with itenv->ReleaseStringUTFChars(param,cparam);

如果出现问题,请提供建议.它工作正常,但可能仍然是一些问题,所以随时评论. 总结

以上是内存溢出为你收集整理的Android上的JNI:如何从Java代码中检索字符串?全部内容,希望文章能够帮你解决Android上的JNI:如何从Java代码中检索字符串?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1139897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存