2011-09-13 39 views
1

我是新的Android JNI。我将Java文件中的JAVA对象发送给下面给出的C代码。其实我认为我无法将jObject转换为字符,因此当我编译此代码时,我得到以下错误:Android的JNI错误:警告:初始化从指针没有投的指针整数

警告:初始化会使指针中的整数无法投射

我的C文件:

typedef struct { 
    unsigned char reg_chal[32]; 
    unsigned char aid[32]; 
} reg_info_t; 

JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_reg(JNIEnv *env,jclass obj,jobject info ,jchar details,jchar reg_code) 
{ 
    reg_info_t regInfo; 
    jclass clazz; 
    jfieldID fid; 
    jmethodID mid; 

    jint status =0; 

    LOGD("NDK:LC: [%s]", "JNI Function call started"); 
    LOGD("NDK:LC: [%s]", details); 
    LOGD("NDK:LC: [%c]", reg_code); 

    //GetInfo(entryInfo); // fills in the entryInfo 

    clazz = (*env)->GetObjectClass(env, info); 
    if (0 == clazz) 
    { 
     printf("GetObjectClass returned 0\n"); 
     return(-1); 
    } 

    jchar reg_chal = (*env)->NewStringUTF(env,regInfo.reg_chal); 
    fid = (*env)->GetFieldID(env,clazz,"reg_chal","Ljava/lang/String;"); 
    (*env)->SetObjectField(env,info,fid,reg_chal); 
    LOGD("NDK:LC: [%c]", reg_chal); 

    jchar aid = (*env)->NewStringUTF(env,regInfo.aid); 
    fid = (*env)->GetFieldID(env,clazz,"aid ","Ljava/lang/String;"); 
    (*env)->SetCharField(env,info,fid,aid); 
    LOGD("NDK:LC: [%c]", aid); 


    //reg_step_1(info , details, reg_code); 
    //status = reg_step_1(info , details, reg_code); 
    return status; 

} 

请帮我如何解决转换的这个错误?

回答

1

NewStringUTF不返回jchar;它返回一个jstring,这实际上只是jobject的同义词。

您应该将jchar reg_chal更改为jstring reg_chal,并将jchar aid更改为jstring aid

+0

@ Struart Cook:谢谢你的帮忙。它现在正在构建这个lib。但是现在我得到了一种新的错误:I/DEBUG(31):*** *** *** *** *** *** *** *** *** * ** *** *** *** *** *** I/DEBUG(31):构建指纹:'generic/sdk/generic /:2.2/FRF91/43546:eng/test-keys' (31):pid:692,tid:692 >>> com.marakana <<< I/DEBUG(31):信号11(SIGSEGV),故障地址00000064任何想法如何解决信号11错误在ndk?感谢您的帮助 –