说明:本博客记录一下,如何将JNI层的PointF类对象数组返回给Java层,是一维数组的。
1、Java层接口定义:
public native PointF[] GetArrayPf();
2、JNI层实现:
extern "C"
JNIEXPORT jobjectArray JNICALL
Java_com_terawins_www_demo007_Java_1Interface_GetArrayPf(JNIEnv *env, jobject instance) {
// TODO
jobjectArray oa_ret = NULL;
jclass cls = env->FindClass("android/graphics/PointF");
jmethodID mi_construct = env->GetMethodID(cls, "<init>", "(FF)V"); //PointF的构造函数
int nLenArr = 5;
oa_ret = env->NewObjectArray(nLenArr, cls, NULL);
for (int i = 0; i < nLenArr; ++i) {
float fx = i + 1;
float fy = 3 * fx;
jobject ob_tmp = env->NewObject(cls, mi_construct, fx, fy);
env->SetObjectArrayElement(oa_ret, i, ob_tmp);
env->DeleteLocalRef(ob_tmp);
}
return oa_ret;
}
3、Java层测试:
public void OnTest(View view)
{
PointF []pt = mm_ji.GetArrayPf();
int nLen = pt.length;
String str = "";
for (int i = 0; i < nLen; i++)
{
str += String.format("pt[%d]: x = %f, y = %f\n", i, pt[i].x, pt[i].y);
}
tv_show.setText(str);
}
备注:其中mm_ji是一个自定义的加载so库的class,tv_show就是一个TextView控件实例。
---- The End.