JNI类型不正确的错误。
来源:互联网 发布:淘宝怎么不能取消退款 编辑:程序博客网 时间:2024/04/29 00:00
http://blog.csdn.net/xiongmc/article/details/8970036
情境如下:当你在C#中调用JNI的方法时,会存在Invalid indirect reference 0x5a02d6e0 in decodeIndirectRef错误。例如:testdemo.cpp文件中的类型为char* requestId ,在调用CallStaticVoidMethod方法时,就存在了这种错误。为什么?问题是requestId传递的是数字型的字符串,你需要NewStringUTF转换string类型。否则编译时会将你的字符串的数字型看成是引用类型,事实上,不是作为引用类型,它是简单的数字。
test.cpp
void FlyfotMembership_createFriendshipRequest(char* requestId,char* Yodo1SetCallbackGameObj,char* Yodo1SetCallbackMethodName,char* Yodo1SetCallbackContextParams){
LOGI("createFriendshipRequest");
jclass cls = getUnitySupportMms();
if(cls != NULL){
jmethodID id = jni_env->GetStaticMethodID(cls,cn_UnitySupportMms_createFriendshipRequest,cn_UnitySupportSns_createFriendshipRequest_params);
if(id!=NULL){
LOGI("createFriendshipRequest methodID=%d",id);
jni_env->CallStaticVoidMethod(cls,id,
requestId,
jni_env->NewStringUTF(Yodo1SetCallbackGameObj),
jni_env->NewStringUTF(Yodo1SetCallbackMethodName),
jni_env->NewStringUTF(Yodo1SetCallbackContextParams));
}
}
}
错误log如下:
05-24 14:53:12.108: I/yodo1jni(4460): createFriendshipRequest
05-24 14:53:12.108: D/dalvikvm(4460): Trying to load lib /data/app-lib/com.yodo1.sdk.unity.sampleapp-1/libyodo1_sdk.so 0x41237360
05-24 14:53:12.108: D/dalvikvm(4460): Shared lib '/data/app-lib/com.yodo1.sdk.unity.sampleapp-1/libyodo1_sdk.so' already loaded in same CL 0x41237360
05-24 14:53:12.108: I/yodo1jni(4460): requestUserInfoById methodID=1458096800
05-24 14:53:12.108: W/dalvikvm(4460): Invalid indirect reference 0x5a02d6e0 in decodeIndirectRef
05-24 14:53:12.108: E/dalvikvm(4460): VM aborting
05-24 14:53:12.108: A/libc(4460): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 4473 (UnityMain)
05-24 14:53:12.158: D/dalvikvm(3538): GC_CONCURRENT freed 502K, 13% free 4261K/4864K, paused 2ms+2ms, total 24ms
05-24 14:53:12.218: I/DEBUG(124): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-24 14:53:12.218: I/DEBUG(124): Build fingerprint: 'asus/CN_epad/TF300T:4.2.1/JOP40D/CN_epad-10.6.1.8.1-20130306:user/release-keys'
05-24 14:53:12.218: I/DEBUG(124): Revision: '0'
05-24 14:53:12.218: I/DEBUG(124): pid: 4460, tid: 4473, name: UnityMain >>> com.yodo1.sdk.unity.sampleapp <<<
05-24 14:53:12.218: I/DEBUG(124): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d
05-24 14:53:12.298: I/DEBUG(124): r0 00000000 r1 00000000 r2 deadd00d r3 00000000
05-24 14:53:12.298: I/DEBUG(124): r4 408771b0 r5 0000020c r6 5a02d6e0 r7 5f0331b8
05-24 14:53:12.298: I/DEBUG(124): r8 513f4ef0 r9 5e33c7cd sl 5f033180 fp 00000001
05-24 14:53:12.298: I/DEBUG(124): ip 00004000 sp 5f032f18 lr 40091359 pc 4080ed08 cpsr 60000030
05-24 14:53:12.298: I/DEBUG(124): d0 0000000042960000 d1 0000000000000000
java层实现:
public static void createFriendshipRequest(String requestId, String callbackGameObj,
String callbackMethodName, String callbackContextParams) {
//todo.....
};
解决方案为:
void FlyfotMembership_createFriendshipRequest(char* requestId,char* Yodo1SetCallbackGameObj,char* Yodo1SetCallbackMethodName,char* Yodo1SetCallbackContextParams){
LOGI("createFriendshipRequest");
jclass cls = getUnitySupportMms();
if(cls != NULL){
jmethodID id = jni_env->GetStaticMethodID(cls,cn_UnitySupportMms_createFriendshipRequest,cn_UnitySupportSns_createFriendshipRequest_params);
if(id!=NULL){
LOGI("createFriendshipRequest methodID=%d",id);
jni_env->CallStaticVoidMethod(cls,id,
jni_env->NewStringUTF(requestId),
jni_env->NewStringUTF(Yodo1SetCallbackGameObj),
jni_env->NewStringUTF(Yodo1SetCallbackMethodName),
jni_env->NewStringUTF(Yodo1SetCallbackContextParams));
}
}
}
- JNI类型不正确的错误。
- JQuery 类型错误,导致数值不正确
- 解决关于"因为配置类型不正确,系统无法开始服务器进程..."的错误
- VC_ConnectionPtr->exectue 不正确的变量类型
- 宏不正确的写法,导致编译错误
- mysql 驱动名称不正确导致的错误
- ADODB.Stream 错误 '800a0bb9' 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
- 【JNI】JNI中java类型的简写
- 【JNI】JNI中java类型的简写
- 错误类型:ADODB.Recordset (0x800A0BB9)参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- SpriteBuilder中返回的对象类型不正确的原因
- php 读取mysql中bit类型的数据不正确
- VB6中ByRef 参数类型不正确的处理方法
- JNI出现的错误整理
- 调试错误—ADODB.Recordset (0x800A0BB9)参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
- 我正在制作一网页,出现 ADODB.Recordset 错误 '800a0bb9'参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- ADODB.Recordset 错误 '800a0bb9' 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- vc2005程序的运行错误“由于应用程序的配置不正确...”
- 比较好的EXTJS ASP.NET 控件
- 读取通信录
- android和java之间相互用DES加密解密传输问题
- 将python程序以linux服务部署
- XP系统改变显示亮度
- JNI类型不正确的错误。
- 用户态应用程序直接与USB设备通信(不需要USB设备Driver)
- js截取长度
- HTML5将是一个时代的开始
- IOS UIActivityIndicatorView、UIProgressView
- make menuconfig error
- C++代码优化方法总结
- PHP图像处类库 MagickWand
- 文件遍历