jni和java對(dui)應關系
| Java 類型 | 本地類型 | 描述 |
| boolean | jboolean | C/C++8位整型 |
| byte | jbyte | C/C++帶符號的8位整型 |
| char | jchar | C/C++無符號的16位整型 |
| short | jshort | C/C++帶符號的16位整型 |
| int | jint | C/C++帶符號的32位整型 |
| long | jlong | C/C++帶符號的64位整型e |
| float | jfloat | C/C++32位浮點型 |
| double | jdouble | C/C++64位浮點型 |
| Object | jobject | 任何Java對象,或者沒有對應java類型的對象 |
| Class | jclass | Class對象 |
| String | jstring | 字符串對象 |
| Object[] | jobjectArray | 任何對象的數組 |
| boolean[] | jbooleanArray | 布爾型數組 |
| byte[] | jbyteArray | 比特型數組 |
| char[] | jcharArray | 字符型數組 |
| short[] | jshortArray | 短整型數組 |
| int[] | jintArray | 整型數組 |
| long[] | jlongArray | 長整型數組 |
| float[] | jfloatArray | 浮點型數組 |
| double[] | jdoubleArray | 雙浮點型數組 |
| 函數 | Java 數組類型 | 本地類型 |
| GetBooleanArrayElements | jbooleanArray | jboolean |
| GetByteArrayElements | jbyteArray | jbyte |
| GetCharArrayElements | jcharArray | jchar |
| GetShortArrayElements | jshortArray | jshort |
| GetIntArrayElements | jintArray | jint |
| GetLongArrayElements | jlongArray | jlong |
| GetFloatArrayElements | jfloatArray | jfloat |
| GetDoubleArrayElements | jdoubleArray | jdouble |
jfloatArray jArray = env->NewFloatArray(8);
| 函數 | 描述 |
| GetFieldID | 得到一個實例的域的ID |
| GetStaticFieldID | 得到一個靜態的域的ID |
| GetMethodID | 得到一個實例的方法的ID |
| GetStaticMethodID | 得到一個靜態方法的ID |
定義字符(fu)串:
jobjectArray arrays = 0;//定義長(chang)度jsize len = 20;arrays = (*jniEnv)->NewObjectArray(jniEnv, len, (*jniEnv)->FindClass(jniEnv, "java/lang/String"), 0);jstring jstr;char* sa[] = { "Hello,", "world!", "JNI", "很", "好玩" };int i = 0;for (; i < len; i++){jstr = (*env)->NewStringUTF(env, sa[i]);(*env)->SetObjectArrayElement(env, arrays, i, jstr);//必(bi)須放入jstring}
獲取(qu)數組的值:
int k = 0;for (; k < len; k++) {jstring string = (jstring)((*jniEnv)->GetObjectArrayElement(jniEnv,arrays, k));if (string != NULL) {char * c = (*jniEnv)->GetStringUTFChars(jniEnv, string, 0);__android_log_print(ANDROID_LOG_INFO, "JNIMsg", c);}}
中間層數據類型(xing)轉化:
char* ---> jstring (*jniEnv)->NewStringUTF(jniEnv,char*)jstring ---> char (*jniEnv)->GetStringUTFChars(jniEnv, jstring, 0);long ---> char* ltoa(long,char*,10); sprintf(csendBodyLen,"%ld",sendBodyLen);char* ---> long *long = atol(char*);