android蓝牙开发保存数据,Android蓝牙开发之数据窜位和数据接收错误以及重组字节数据...

现在是我和开发的接收数据出现了问题,总共会接收4串数据(32个字节),第一条和第二条都不会有错,但是第三条和第四条不知道为什么数据总会出现串位,

要么就是头码跑到后面去,要么就是中间的跑到前面来。

这是之前在处理数据的时候碰到的问题,现在已经解决。

byte[] read = new byte[32 - fillIndex];

int bytes = mmInStream.read(read);

for (int j = 0; j < bytes; fillIndex++, j++) {

buffer[fillIndex] = read[j];

}

if (fillIndex == 32) {

byte[] newbyte = new byte[32];

System.arraycopy(buffer, 0, newbyte, 0, 32);

int i = Uitils.Check(newbyte);

if (i == 1 || i == 2) {

System.out.println("头码尾码校验错误");

fillIndex = Uitils.fix(buffer);

continue;

} else if (i == 3) {

System.out.println("高低字節校驗錯誤");

} else {

mHandler.obtainMessage(SetActivity.MESSAGE_READ,

newbyte.length, -1, newbyte).sendToTarget();

}

fillIndex = 0;

}

上面是主要的代码。

Uitils.Check(newbyte)

这个方法只是处理一个校验的代码,可以忽视。

byte[] buffer = new byte[32];

int fillIndex = 0;

这是变量的声明,bytes代表的是每次接受到多少个数据,因为有时候只能接受到2个或者30个都有可能,由于我说接受到的字节有32个字节,所以用fillIndex这个变量来处理接受到了多少个字节,当获取到32个字节的时候就可以进行处理,比如用handler发送出去。

但是有时候万一出现了一种情况就是如果还是出现了错位,出现一次就改不回来了,这时候就需要自己将数据重组回来,就是Fix方法。

public static int fix(byte[] result){

boolean temp=false;

int count=0;

int index = 1;

for (; index < result.length; index++) {

switch (count) {

case 0:

if(result[index]==defultbyte[0]){

count++;

}

break;

case 1:

if(result[index]==defultbyte[1]){

count++;

}

else{

count=0;

}

break;

case 2:

if(result[index]==defultbyte[2]){

count++;

}else count=0;

break;

case 3:

if(result[index]==defultbyte[3]){

count++;

}else count=0;

break;

case 4:

temp=true;

break;

}

if(temp)break;

}

int fillIndex=0;

if(count>0){

for (int j=index-count; j < result.length; fillIndex++,j++) {

result[fillIndex]=result[j];

}

}

return fillIndex;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值