編輯:關於android開發
本文接著實現《Android java傳遞int類型數據給C》的還未實現的方法:
public native String sayHelloInC(String s);
先貼一個工具方法,具體意義後面的文章將介紹
/**
* 把一個jstring轉換成一個c語言的char* 類型.
*/
char* _JString2CStr(JNIEnv* env, jstring jstr) {
char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env, "java/lang/String");
jstring strencode = (*env)->NewStringUTF(env, "GB2312");
jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes",
"(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray) (*env)->CallObjectMethod(env, jstr, mid,
strencode); // String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env, barr);
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
if (alen > 0) {
rtn = (char*) malloc(alen + 1); //"\0"
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
(*env)->ReleaseByteArrayElements(env, barr, ba, 0);
return rtn;
}
接著完成sayHelloInC函數
/* * Class: com_wuyudong_javapassdata_JNI * Method: sayHelloInC * Signature: (Ljava/lang/String;)Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_wuyudong_javapassdata_JNI_sayHelloInC( JNIEnv * env, jobject clazz, jstring jstr) { //調用工具方法把java中的string類型轉換成C語言中的char× char* cstr = _JString2CStr(env, jstr); int len = strlen(cstr); int i; for (i = 0; i < len; i++) { *(cstr + i) += 1; } return (*env)->NewStringUTF(env, cstr); }
MainActivity.java中添加下面代碼:
public void passString(View v) {
Toast.makeText(getApplicationContext(), jni.sayHelloInC("hello yudong"), 0).show();
}
搞定,運行項目
獲取更多C相關知識,關注公眾號:“csuanfa”

3D圖片采集與展示(SurfaceView 自適應 Camera, 錄制視頻, 抽取幀),
3D圖片采集與展示(SurfaceView 自適應 Camera, 錄制視頻, 抽取幀), 最近在做一個3D圖片采集與展示。 主要功能為:自定義Camera(google
自己實現android側滑菜單
自己實現android側滑菜單 當今的android應用設計中,一種主流的設計方式就是會擁有一個側滑菜單,以圖為證: 實現這樣的側滑效果,在5.0以前
第四篇 Android應用程序詳細解析,第四篇android
第四篇 Android應用程序詳細解析,第四篇android我們繼續的沿用上一篇所建立的應用。 Android應用程序可以分為:應用程序源代碼(.java),應用程序描
android 史上最簡單易懂的跨進程通訊(Messenger)!,androidmessenger
android 史上最簡單易懂的跨進程通訊(Messenger)!,androidmessenger不需要AIDL也不需要復雜的ContentProvider,也不需要S