2011-09-13 9 views
1

Android JNIの新機能です。私はJavaファイルから以下のCコードにJAVAオブジェクトを送ります。私のjObject情報にはjava.Actuallyのchar []値が含まれています。私はjObjectをcharに変換できないと思いますので、このコードをコンパイルするとエラーが発生します: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

NewStringUTFjcharを返しません。 jstringを返します。これは実際にはjobjectの同義語です。

jchar reg_chaljstring reg_chalに変更し、jchar aidjstring aidに変更する必要があります。

+0

@ Struart Cook:おかげで助けてくれました。それは今、libをうまく構築しています。しかし私は今、新しいタイプのエラーが発生しています:I/DEBUG(31):*** *** *** *** *** *** *** *** *** *** * ** *** *** *** *** *** *** I/DEBUG(31):ビルドフィンガープリント: 'generic/sdk/generic /:2.2/FRF91/43546:eng/test-keys' シグナル11(SIGSEGV)、フォールトaddr 00000064どのようにシグナル11のエラーを修正するか考えてみてください。 ndkで?ヘルプありがとう –

関連する問題