Android Studio 開發之JNI開發 -- jni層返回一維對象數組

說明:本博客記錄一下,如何將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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章