我想学习下 android的java层和C语言层数组传递机制,就用了
GetByteArrayRegion和SetByteArrayRegion两个 函数,
现在的问题是 用SetByteArrayRegion 从 C==》》》java是没有问题的。
但是 从java==>>> C的话,用GetByteArrayRegion就出错。请大家帮我分析下为什么,下面是我的代码:
jbyteArray Java_com_example_test_Getdata(JNIEnv *env, jobject thiz)
{
.................///一些其他获取数据的代码
byteArray = (*env)->NewByteArray(env, size);
if (byteArray == NULL)
{
return NULL;
}
(*env)->SetByteArrayRegion(env, byteArray, 0, size,(jbyte *)data);
return byteArray;
}void Java_com_example_test_Setdata(JNIEnv *env, jobject thiz,jbyteArray jbuffer,jint size)
{ jbyteArray byteArray = NULL;
jbyte data[size];
(*env)->GetByteArrayRegion(env,jbuffer, 0, size, data); ///<-----这里出问题,请教下为什么,谢谢!!!
__android_log_print(ANDROID_LOG_INFO, "test", "test-----%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--",
size,
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6]);
return ;
}
GetByteArrayRegion和SetByteArrayRegion两个 函数,
现在的问题是 用SetByteArrayRegion 从 C==》》》java是没有问题的。
但是 从java==>>> C的话,用GetByteArrayRegion就出错。请大家帮我分析下为什么,下面是我的代码:
jbyteArray Java_com_example_test_Getdata(JNIEnv *env, jobject thiz)
{
.................///一些其他获取数据的代码
byteArray = (*env)->NewByteArray(env, size);
if (byteArray == NULL)
{
return NULL;
}
(*env)->SetByteArrayRegion(env, byteArray, 0, size,(jbyte *)data);
return byteArray;
}void Java_com_example_test_Setdata(JNIEnv *env, jobject thiz,jbyteArray jbuffer,jint size)
{ jbyteArray byteArray = NULL;
jbyte data[size];
(*env)->GetByteArrayRegion(env,jbuffer, 0, size, data); ///<-----这里出问题,请教下为什么,谢谢!!!
__android_log_print(ANDROID_LOG_INFO, "test", "test-----%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--%.2x--",
size,
data[0],
data[1],
data[2],
data[3],
data[4],
data[5],
data[6]);
return ;
}
解决方案 »
- andriod2.3 sensor问题
- 大家帮我看下这是什么错误啊
- SQLiteDatabasequey类的quey()返回的Curosr会为null吗?
- 用DOM进行xml文件解析出现Java.lang.NullPointerException错误
- android RTSP协议视频流播放的没有声音的问题
- Choreographer的一个问题
- 如何获取真实的屏幕像素分辨率
- appendPath 的用法
- android程序可以开发直接打内线号码吗?
- 安卓生成二维码
- 请教android ndk 编程时 用cygwin 编译调用第三方zmq库问题!
- ListView左右滑动如果拦截item响应触摸事件?
我在native层用 byteArray = (*env)->NewByteArray(env, size);分配一个java的内存空间,把指针返回到java层,然后把这个指针又传回到native中,这样下来native再对这片内存拷贝就出错了,不清楚其中的道理, 哪位大神帮忙给解释下,谢谢了!