You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android JNI中如何正确获取SharedPreferences.getString方法的MethodID

解决JNI中SharedPreferences getString方法的MethodID获取问题

你这里的问题出在方法签名的返回值部分缺失啦!JNI的方法签名需要完整包含参数列表和返回值类型,你写的getString签名只加了参数,漏掉了返回值的声明。

正确的getString方法签名写法

Java中getString(String key, String defValue)对应的JNI方法ID获取代码应该是:

jmethodID getStringMethodID = JEnv->GetMethodID(sharedPreferencesClass, "getString", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");

为什么这样写?

JNI方法签名的核心规则是:

  • 用()包裹所有参数的类型标识
  • 括号后面必须紧跟方法的返回值类型标识
  • 引用类型(比如String)的标识格式是L完整类名;,分号绝对不能省略,类名里的包层级用斜杠/分隔
  • 基本类型有固定缩写:比如boolean是Z,int是I,void是V等等

对比你之前成功的getBoolean方法签名"(Ljava/lang/String;Z)Z"就能明白:

  • 括号内是String参数(Ljava/lang/String;)+ boolean参数(Z)
  • 括号后是返回值boolean(Z)

getString方法的两个参数都是String,返回值也是String,所以签名需要补上末尾的Ljava/lang/String;,这样就能正常获取到对应的MethodID了!

内容的提问来源于stack exchange,提问作者Chip Burwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:32:40