2013-12-10 2 views
0

그래서 ndk/c/C++로 조금 작업 해 왔고 jbooleanArray var 유형에 대해 알고 있습니다.하지만 제 질문은 어떻게 2d 부울 배열을 만들고이를 Java로 반환 할 것인가입니다. ? 다음은 예입니다 :Android ndk; c/C++에서 2d 부울 배열을 만들고이를 Java로 반환하는 방법은 무엇입니까?

#include "retrieveboolarray.h" 
#define LOG_TAG "!" 
//macros to call the Log functions to allow for debugging. the tag is declared on the line above 
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) 
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) 

JNIEXPORT jint JNICALL Java_com_example_ndktesting_generateBoolArrays_retrieveBoolArray(
     JNIEnv * env, jobject obj, jint refNum) { 
    //refNum will eventually be used to access certain arrays 
    return refNum; 
} 

그래서 지금은 내가 2D 부울 배열을 생성하고 자바로 반환하는 방법, 정수를 반환이야?

업데이트 : 아직 여기 불행히도

JNIEXPORT jobjectArray JNICALL Java_com_example_ndktesting_generateBoolArrays_retrieveBoolArray(
     JNIEnv * env, jobject obj, jint refNum) { 

    jboolean flag = JNI_TRUE; 
    jclass stringClass = (*env)->FindClass(env, "java/lang/Boolean"); 
    jobjectArray row; 
    jobjectArray rows; 
    jboolean hello = 1; 
    int MAXRESPONSE = 5; 
    int MAXTEST = 5; 

    jsize i, j; 
    for (i = 0; i < 5; i++) { 
     row = (*env)->NewObjectArray(env, MAXRESPONSE, stringClass, 0); 
     for (j = 0; j < 3; j++) { 
      (*env)->SetObjectArrayElement(env, row, j, hello); 
     } 

     if (flag == JNI_TRUE) { 
      flag = JNI_FALSE; 
      rows = (*env)->NewObjectArray(env, MAXTEST, 
        (*env)->GetObjectClass(env, row), 0); 
     } 

     (*env)->SetObjectArrayElement(env, rows, i, row); 
    } 

    return rows; 
} 

희망 누군가가 부울 배열을 반환 /이 내가 할 수 해결하는 방법에 대한 아이디어를 가지고 행운과, 내가 이전에 시도한 몇 가지 코드입니다.

답변

3

기본적으로 jbooleanArray 인스턴스가 포함 된 jobjectArray를 사용해야합니다. 유사한 예는 here을 참조하십시오.

업데이트 :이 테스트 작동되는보다

내가 C++를 사용하여 코드를 작성하고 여기에 C로 변환하지만, 다른.

JNIEXPORT jobjectArray JNICALL Java_com_example_ndktesting_generateBoolArrays_retrieveBoolArray(
    JNIEnv* env, jobject obj, jint refNum) { 
    jclass arrayClass = (*env)->FindClass(env, "[Z"); 
    int numColumns = 5, numRows = 5; 
    jobjectArray twoDArray = (*env)->NewObjectArray(env, numColumns, arrayClass, 0); 
    jbooleanArray column; 

    // Initialization of the source array 
    jboolean source[numColumns][numRows]; 
    for (int i = 0; i < numColumns; ++i) { 
     for (int j = 0; j < numRows; ++j) 
      source[i][j] = true; 
    } 

    for (int i = 0; i < numColumns; ++i) { 
     column = (*env)->NewBooleanArray(env, numRows); 
     (*env)->SetBooleanArrayRegion(env, column, 0, numRows, source[i]); 
     (*env)->SetObjectArrayElement(env, twoDArray, i, column); 
    } 
    return twoDArray; 
} 

Java 코드에서 Object[]이 표시됩니다. 각 요소를 boolean[]으로 전송할 수 있습니다.

+0

불행히도 그 링크를 보았습니다. 어제 운 좋게 수정하지 않으 셨습니다. (내 질문에 대한 업데이트에서 시도한 결과를 포함 시키겠습니다. – codingNewb

+0

저는 지금 제 휴대 전화에 있습니다. 하지만 집에 돌아 가면 작동 예제로 업데이트 할 것입니다. – Dave

+0

@codingNewb 예제를 사용할 수 있습니다. 거기에서 알아낼 수 있어야합니다. – Dave

관련 문제