jbyteArray readBuf=NULL;
static jbyteArray read_bt_printer_native(JNIEnv *env, jobject clazz, int ptr)
{
char buf[256] = {0};
int i=0;
memset(buf, 0, 256);
bt_printer_device_t* devices = (bt_printer_device_t*)ptr;
devices->bt_printer_read(buf, 256); //从串口读数据
//这里能正确buf的数据
readBuf = env->NewByteArray(256); //开辟数组
if (!readBuf) {
LOGE("extractAlbumArt: OutOfMemoryError is thrown.");
}
else {
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
env->ReleaseByteArrayElements(readBuf, bytes, 0);
}
}
//这里我想把readbuf 值给打印出来。但是没有读出来。我不知道怎么回事。
//
// for(i=0;i<100;i++)
// {
// LOGE("readBuf=%x\n",readBuf[i]);
// }
// LOGE("readBuf=%s\n",readBuf);
return readBuf;
}
这是一个JNI的代码:
我出现的问题是:
上层应用程序读数据时有时候显示不完全。(比如数据应该是c8600,应用程序读出来是600)
所以我就在上面添加打印语句。但是没有读出来。我不知道怎么回事。
static jbyteArray read_bt_printer_native(JNIEnv *env, jobject clazz, int ptr)
{
char buf[256] = {0};
int i=0;
memset(buf, 0, 256);
bt_printer_device_t* devices = (bt_printer_device_t*)ptr;
devices->bt_printer_read(buf, 256); //从串口读数据
//这里能正确buf的数据
readBuf = env->NewByteArray(256); //开辟数组
if (!readBuf) {
LOGE("extractAlbumArt: OutOfMemoryError is thrown.");
}
else {
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
env->ReleaseByteArrayElements(readBuf, bytes, 0);
}
}
//这里我想把readbuf 值给打印出来。但是没有读出来。我不知道怎么回事。
//
// for(i=0;i<100;i++)
// {
// LOGE("readBuf=%x\n",readBuf[i]);
// }
// LOGE("readBuf=%s\n",readBuf);
return readBuf;
}
这是一个JNI的代码:
我出现的问题是:
上层应用程序读数据时有时候显示不完全。(比如数据应该是c8600,应用程序读出来是600)
所以我就在上面添加打印语句。但是没有读出来。我不知道怎么回事。
解决方案 »
- android 如何检测bundle是否有值?
- WebKit网页内部的滚动面板永远是不可滚动的?
- 程序出错Unable to start activity ComponentInfo
- android AVD怎么样才能读取到pc机上USB接口的数据?急求!
- 我自己写的一个SurfaceView为什么显示不出来呢?
- Android下通过USB通讯的问题
- 动态更新UI内容。(非addView,关于进程间通讯)
- 如何在java Code中修改TextView的大小?
- 用java怎么开发服务器?
- 安卓9是不是可以在子线程更新ui了
- 为什么老是返回null,有木有人知道
- data/com.android.providers.settings/databases/settings.db中bookmarks这个表存的数据是什么?
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
把好不容易获得的数据,又重新给冲掉了!
_SIZE_T __n);
改成
memcpy(buf, bytes, 256);