NDK中,C如何调用带有byte[]参数的java函数

yupengchen951124 2011-10-19 09:52:21
我想在so部分调用java的某个函数,该函数的参数有byte[]等。
部分的C代码如下:
jmethodID java_method = (*env)->GetMethodID(env, java_class, "PlayAudio", "([BI)V");
if(java_method == 0)
{
return (*env)->NewStringUTF(env, "not find PalyAudio!");
}
char szTemp[20] ={0xff};
(*env)->CallObjectMethod(env, java_obj, java_method, szTemp, 20);

java中PlayAudio的原型为:
public void PlayAudio(byte[] data, int datalen)

可是C部分调用是却出现空指针的调用异常。byte[]这个参数在C中该如何填入,传递到java部分?
...全文
619 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
充电宝111 2011-11-08
  • 打赏
  • 举报
回复
看看android音频方面是怎么做的啊
yupengchen951124 2011-11-08
  • 打赏
  • 举报
回复
根本原因是被C那边调用的FunJava里面包含了一些I/O操作,比如向缓冲区写入pcm数据等。或者读写文件。
yupengchen951124 2011-11-08
  • 打赏
  • 举报
回复
我是LZ,是这样的,so方面完成了aac数据流的解码,形成PCM数据流,然后想送到android应用层那边做播放,所以要将byte[]数据传输给应用层做播放,因此想调用java那边的接口,参数传入byte[]类型的数据,但是每次调用都会产生异常。
充电宝111 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 challchampion 的回复:]

what???

引用 8 楼 wyx100 的回复:

如果你在FunJava中将传进来的数组拷贝一份,再做调用呢?有没有错误信息可以看一下。
如果是c与java用socket方式通信的话,用本地socket就可以了吧
[/Quote]

ril就是这么干的,可以参考下
challchampion 2011-11-07
  • 打赏
  • 举报
回复
如果你在FunJava中将传进来的数组拷贝一份,再做调用呢?有没有错误信息可以看一下。
如果是c与java用socket方式通信的话,用本地socket就可以了吧

[Quote=引用 5 楼 yupengchen951124 的回复:]

谢谢你,其实我也有试过这样的做法,问题是我c调用java的接口如果涉及到一些系统调用,比如读写文件或者操作内核数据时,就会出现异常。
如C-->FunJava()


FunJava()
{
//文件读写。
//或者播放声音数据
}
[/Quote]
yupengchen951124 2011-11-07
  • 打赏
  • 举报
回复
我现在做的另外一种替代方案是 使用socket的方式让它们进行通信。比如发 udp数据包。
yupengchen951124 2011-11-07
  • 打赏
  • 举报
回复
谢谢你,其实我也有试过这样的做法,问题是我c调用java的接口如果涉及到一些系统调用,比如读写文件或者操作内核数据时,就会出现异常。
如C-->FunJava()


FunJava()
{
//文件读写。
//或者播放声音数据
}
challchampion 2011-11-07
  • 打赏
  • 举报
回复
jbyteArray bytes = 0;
int len = 20;
bytes = (*env)->NewByteArray(env, len);
if(bytes != NULL){
(*env)->SetByteArrayRegion(env, bytes, 0, len, (jbyte *)szTemp);
....
}

楼主试试吧,我没有验证,希望对你有帮助
yupengchen951124 2011-11-07
  • 打赏
  • 举报
回复
这个问题,一直没答案?期待android专区高手
challchampion 2011-11-07
  • 打赏
  • 举报
回复
what???

[Quote=引用 8 楼 wyx100 的回复:]

如果你在FunJava中将传进来的数组拷贝一份,再做调用呢?有没有错误信息可以看一下。
如果是c与java用socket方式通信的话,用本地socket就可以了吧
[/Quote]
wyx100 2011-11-07
  • 打赏
  • 举报
回复
如果你在FunJava中将传进来的数组拷贝一份,再做调用呢?有没有错误信息可以看一下。
如果是c与java用socket方式通信的话,用本地socket就可以了吧

yupengchen951124 2011-10-25
  • 打赏
  • 举报
回复
继续顶 ……直到有高人出现。
yupengchen951124 2011-10-20
  • 打赏
  • 举报
回复
都没有人回答啊 ,对android版块很是失望啊

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧