ola*_*ure 1 c++ java java-native-interface android
如果将方法定义为返回(静态)接口,那么JNI的"方法签名"是否不同?
在我的Java类中,我有这个方法:
public SharedPreferences.Editor getSharedPrefsEditor() {
return mActivity.getPreferences(Context.MODE_PRIVATE).edit();
}
Run Code Online (Sandbox Code Playgroud)
SharedPreferences.Editor是SharedPreferences中的静态接口.
在我的C++ JNI代码中,我这样做:
// 'env' is the java environment that JNI passes to us
// 'jObject' is the one that JNI passes to us (along with env)
jclass javaCallerClass = env->GetObjectClass(jObject);
jmethodID methodId_getSharedPrefsEditor = env->GetMethodID(
javaCallerClass,
"getSharedPrefsEditor",
"()Landroid/content/SharedPreferences/Editor;");
Run Code Online (Sandbox Code Playgroud)
由于一些奇怪的原因,这不起作用.它编译,但在运行时我得到这个:
DEBUG/dalvikvm(19020):GetMethodID:找不到方法:Lcom/mangotaster/madballs/MyRenderer; .getSharedPrefsEditor :()Landroid/content/SharedPreferences/Editor;
我正在以相同的方式调用该类中的其他方法而没有任何问题.
唯一的变化似乎是回报值.我确实尝试直接从JNI代码调用edit()函数,但得到了同样的错误 - 这让我相信我的函数签名"()Landroid/content/SharedPreferences/Editor;" 确实是错的.
有关SharedPreferences类的更多信息.
Tim*_*ter 10
嵌套/内部类不使用JNI签名中的标准命名空间命名法.实际上,内部类被Java编译器转换为与外部类相同级别的普通类,名称为"Outer $ Inner".我想你想要的"()Landroid/content/SharedPreferences$Editor;".
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |