消息处理程序被下一条消息覆盖

时间:2013-02-05 21:43:37

标签: java android handler

不是编程新手,而是Java和Android的新手。应用程序是蓝牙SPP接收每秒一次获取短数据包。有时,蓝牙会给我一部分信息,然后在给我剩下的信息后迅速给出。发生这种情况时,我的接收线程会向我的解析器发送相同类型的消息,但内容不同。但是,解析器从第二条消息接收第一条消息的“长度”的“数据”。

这是我的代码,我想知道我应该做些什么来区分消息,或者我是否需要在接收器线程中检查消息是否已被处理并休眠几毫秒并再试一次。意见?抱歉,我正在通过我看到的例子来学习,我确信有几种方法可以做我在这里做的事情。

接收者:

protected void receive() {
    byte[] recvBuffer = new byte[128];
    while(inStream != null) {
        try {
            int bytesReceived = inStream.read(recvBuffer);
            System.out.println("BT-In: ");
            String outString = new String(recvBuffer, 0, bytesReceived);
            System.out.println(outString);
            processReceive.obtainMessage(NEW_DEVICE_DATA, bytesReceived, -1, recvBuffer)
                          .sendToTarget();
        }
        catch (IOException e){
            WarningBox("Warning", "Receive over Bluetooth did not work, check connection.");      
            break;
        }
    }
};

处理程序:

Handler processReceive = new Handler() {
@Override
    public void handleMessage(Message msg) {
        switch(msg.what) {
        default:
            break;
        case NEW_DEVICE_DATA:
            byte[] parseInfo = (byte[])msg.obj;
            String outString = new String(parseInfo, 0, msg.arg1);
            System.out.println("Parse-In: ");
            System.out.println(outString);
            //ParseReceivedData(parseInfo);
            break;
        }
    }
};

现在我不是在解析数据,而是试图验证我从远程设备上通过蓝牙获取所有内容,并且我正确地将其发送到解析器,最终将更新我的屏幕字段。

我的日志可能如下所示:

BT-在: ABCABC

解析日期: ABCABC

BT-在: 12

BT-在: 3456789

解析日期: 34

解析日期: 3456789

有错误,我有两个蓝牙接收到彼此,说整个字符串是“123456789”,但我把它分为两部分“12”然后“3456789”我将这两部分发送到我的解析器(主线程),处理程序看到两条消息,但第一条消息的大小正确接受,但内容不正确。

0 个答案:

没有答案