关于Android通过蓝牙接收的数据发生丢失的问题

背景:我现在在做手机端与单片机通过蓝牙进行数据传递。
问题:在我通过蓝牙接收单片机通过串口发来的数据的时候,出现了:
1:大量为0的无用数据;
2:缺失部分数据;
接收代码如下。

        while(true){
                        try {
                            num = inputStream.read(buffer_z);
                            n=0;
                            for(i=0;i<num;i++){
                                buffer_z_new[n] = buffer_z[i];
                                n++;
                            }

                            String s =bytesToHexString(buffer_z_new);
                            smsg+=s.trim();

                            if(inputStream.available()==0)break;
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                    StringBuffer stringBuffer = new StringBuffer();
                    String a = smsg.replace("FB0000",",");
                    String[] b = a.split(",");
                    String c = b[1].replace("1000",",");
                    String[] d = c.split(",");
                    stringBuffer.append(d[1]);
                    String ends = stringBuffer.toString();

                    Message msg = new Message();
                    Bundle data = new Bundle();
                    data.putByteArray("bytes",ends.getBytes());
                    msg.what = MainActivity.ACCEPT_MESSAGE;
                    msg.setData(data);
                    handler.sendMessage(msg);

我该如何解决呢?

3个回答

你这个问题我也遇到过:
1.大量为0的无用数据应该是你的byte数组声明的长度太大了,这样没有数据的部分默认就是0,你可以这样声明的byte数组
byte [] b = new byte[inputStream.available()];
2.数据丢失问题有可能是蓝牙分段传输了,也可能是丢包了,分段问题你可以让单片机设备研发人员把给你发送的数据加上很好区别的头和尾,这样你就可以知道你收到的是否是一条完整的数据,如果不是就先把这个数组缓存起来,这样就可以解决了,丢包问题可能就是蓝牙设备连接不太稳定了。

sinat_21795151
sinat_21795151 这个问题后面又解决吗?我这边也遇到类似的问题了
大约 2 个月之前 回复
zxdynamite
zxdynamite byte我声明的是1024,因为本身传过来的数据就很大,我一开始尝试直接去做处理,但是失败了,然后我声明长度,并进行循环;有头有尾的,但是现在我缺失的一部分里面包括了尾。
2 年多之前 回复

我在字符串截取操作中将在数据一开始出现的大量为0的无用数据截取掉了,现在的遗留的问题是:数据的缺失。
一开始我发送handler的是obtainMessage,后来发现这个方法虽然效率快但是或会发现数据缺失问题,但是我改用sendMessage之后,数据缺失问题
依然没有改变。
我该怎么去处理呢?

数据流并不是连续的,在接收第一帧数据后,你使用break跳出了while(true)循环,后面的数据就没有了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问