相关C方法

C调用java

jclass TestProvider;
jobject mTestProvider;
jmethodID showtoast;
jmethodID sayHello;
JNIEXPORT void JNICALL Java_com_beats_music_musicbeats_NdkTest_setTemp
        (JNIEnv * env, jobject jobj, jstring jstr){
//   1. C 中映射 类
    TestProvider=(*env)->FindClass(env,"com/beats/music/musicbeats/active/ToastUtil");
//   2.C中新建对象
    jmethodID construction_id = (*env)->GetMethodID(env, TestProvider,"<init>", "()V");
    mTestProvider = (*env)->NewObject(env, TestProvider,construction_id);
//   3.C中映射方法
//    静态:
    showtoast = (*env)->GetStaticMethodID(env, TestProvider, "showtost","(Ljava/lang/String;)V");
//    非静态:
//    sayHello = (*jniEnv)->GetMethodID(jniEnv, TestProvider, "sayHello","(Ljava/lang/String;)V");
    //4.调用
//    调用静态:
    (*env)->CallStaticVoidMethod(env,TestProvider,showtoast,jstr);
//    非静态:
//    (*jniEnv)->CallVoidMethod(jniEnv, mTestProvider, sayHello,jstrMSG);
};

 char*转jstring

将char*转成jstring

/**
*  jni中有对应GetStringChar方法
 * 把一个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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值