您的位置:首页 > 移动开发 > Android开发

Android NDK 开发 C++调用java数组 以及方法

2017-10-18 11:40 633 查看
1.编写java ToastPrivate.java

public class ToastPrivate {

private String[] name;

public static String getTime() {
UIUtils.showToast("getTime");
return String.valueOf(System.currentTimeMillis());
}

public void sayHello(String msg) {
LogUtils.d("sayHello");
UIUtils.showToast(name[1]);
}


}

2.cpp 编写代码

JNIEXPORT void JNICALL

Java_com_ucsmy_ycfinance_modules_set_AboutUSActivity_TestProvider(JNIEnv *env, jobject instance) {

jclass TestProviderClass = env->FindClass("com/ucsmy/ycfinance/modules/set/ToastPrivate");
jmethodID methodID = env->GetStaticMethodID(TestProviderClass, "getTime",
"()Ljava/lang/String;");
//env->CallStaticObjectMethod(TestProviderClass, methodID);

//默认构造函数,不传参数
jmethodID construction_id = env->GetMethodID(TestProviderClass, "<init>", "()V");

//通过NewObject来创建对象
jobject mTestProviderObject = env->NewObject(TestProviderClass, construction_id);

jmethodID sayHelloMethodID = env->GetMethodID(TestProviderClass, "sayHello",
"(Ljava/lang/String;)V");

//jclass class  = env->GetObjectClass(mTestProviderObject);
//jclass clazz, const char* name, const char* sig
//jfieldID fieldID = env->GetFieldID(TestProviderClass,"name","Ljava/lang/String;");
jfieldID fieldID = env->GetFieldID(TestProviderClass, "name", "[Ljava/lang/String;");

//jobject obj, jfieldID fieldID, jobject value
jstring stri = env->NewStringUTF("天天上上,好好学习");
jclass stringClass = env->FindClass("java/lang/String");

//jsize length, jclass elementClass, jobject initialElement
jobjectArray objectA = env->NewObjectArray(3, stringClass, stri);

jstring stri1 = env->NewStringUTF("連軍一定要 天天上上,好好学习");

//jobjectArray array, jsize index, jobject value
env->SetObjectArrayElement(objectA,1,stri1);

env->SetObjectField(mTestProviderObject, fieldID, objectA);
env->CallVoidMethod(mTestProviderObject, sayHelloMethodID, stri);


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ndk