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));
}
}


  }









原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq手游授权失败怎么办 钉钉不够6人创建怎么办 钉钉 不够6个人怎么办 plsql删错了表怎么办 吊兰长出来的茎怎么办 防水台鞋跟太高怎么办 证件照头部比例过大怎么办 特岗照片传错了怎么办 打印报名表照片不显示怎么办 刚买的床有味道怎么办 雨刷器角度太小怎么办 四个月宝宝闹觉怎么办 怀孕六个月睡不好觉怎么办? 婴儿睡不好觉总是吵闹怎么办 婴儿鼻塞睡不好觉怎么办 玩英雄联盟鼠标变亮白怎么办 练芭蕾脚受伤了怎么办 高三了英语30分怎么办 要上高中了英语不好怎么办 高二了数学不好怎么办 高二函数不好怎么办啊 输乳怎么办腺病有什么妇症状 屁股上坐的发黑怎么办 车屁股撞了个洞怎么办 腰压迫的腿疼怎么办 肩胛提肌固定不住怎么办 胳膊粗后背肉多怎么办 2岁儿童 肋骨边缘外翻怎么办 5岁宝宝盆骨前倾怎么办 脖子弯了像驼背怎么办 都40周了还没生怎么办 股骨头坏死骨盆歪了怎么办 二胎侧切伤口疼怎么办 小月子盆骨酸痛怎么办 盆骨一边大一边小怎么办 快生了宫颈管长怎么办 想顺产 宫颈管长怎么办 腰和跨一样宽怎么办 脚后跟骨折手术后小腿变细怎么办 生完孩子骨盆错位怎么办 皮肤又黑又粗糙怎么办