jni – 将int 转换为jobjectArray并将其返回给java

我想在c中创建一个新数组,保持原始数组加倍。 这是我的c代码,它编译但应用程序崩溃:

#include  JNIEXPORT jobjectArray JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv *env, jobject obj, jintArray arr) { int i,j, sum = 0; jsize width = (*env)->GetArrayLength(env, arr); int array[2][2]; for (i=0; iGetObjectArrayElement(env, arr, i); int height = (*env)->GetArrayLength(env, line); jint *pos = (*env)->GetIntArrayElements(env, line, 0); for (j=0; jReleaseIntArrayElements(env, arr, pos, 0); } return array; } 

主要java代码:

 package com.example.jninew; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.tv); int[][] a = {{1,2},{3,55}}; a = getNum(a); textView.setText("G"+a[0][1]); } static{ System.loadLibrary("getNum"); } native int[][] getNum(int[][] a); @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

你能帮我把数组返回到java端吗? 拜托我需要你的帮忙!

根据我阅读的手册,这里是我到目前为止的地方。

 #include  #include JNIEXPORT jobjectArray JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv *env, jobject obj, jobjectArray arr) { int i,j, sum = 0; jclass intClass = (*env)->FindClass(env,"[I");// jsize width = (*env)->GetArrayLength(env, arr); jobjectArray jObjarray = (*env)->NewObjectArray(env,width,intClass, NULL); //**// for (i=0; iGetObjectArrayElement(env, arr, i); int height = (*env)->GetArrayLength(env, line); jintArray jline = (*env)->NewIntArray(env,height); //**// jint *pos = (*env)->GetIntArrayElements(env, line, 0); jint jpos[ height ]; for (j=0; jSetIntArrayRegion(env, jline, 0, height, jpos); //**// (*env)->ReleaseIntArrayElements(env, line, pos, 0); (*env)->ReleaseIntArrayElements(env, jline, jpos, 0); //**// (*env)->SetObjectArrayElement(env,jObjarray,i,jline); (*env)->DeleteLocalRef (env,jline); //**// } return jObjarray; }