Java 如何在android中分离通过蓝牙接收的数据

Java 如何在android中分离通过蓝牙接收的数据,java,android,bluetooth,msp430,Java,Android,Bluetooth,Msp430,我修改了BluetoothChat示例代码,将其连接到通用蓝牙收发器,该收发器已连接到TI MSP430开发板上的UART。我已经建立了通信,可以发送和接收单个字符串,并在文本视图中显示值。下面是我用来发送压力、温度1和温度2的1-3位数值的C代码。这是相当简单的,我是按设计工作 for(int i = 0; i <= 2; i++) // send pressure value { UCA0TXBUF = pressureString[i]; while(

我修改了BluetoothChat示例代码,将其连接到通用蓝牙收发器,该收发器已连接到TI MSP430开发板上的UART。我已经建立了通信,可以发送和接收单个字符串,并在文本视图中显示值。下面是我用来发送压力、温度1和温度2的1-3位数值的C代码。这是相当简单的,我是按设计工作

  for(int i = 0; i <= 2; i++)     // send pressure value
  {
    UCA0TXBUF = pressureString[i];
    while(!(IFG2 & UCA0TXIFG));
  }
  for(int i = 0; i <= 2; i++)     // send temp1 value
  {
    UCA0TXBUF = tempOneString[i];
    while(!(IFG2 & UCA0TXIFG));
  }
  for(int i = 0; i <= 2; i++)     // send temp2 value
  {
    UCA0TXBUF = tempTwoString[i];
    while(!(IFG2 & UCA0TXIFG));
  }
这是读取消息并将其显示在文本视图中的代码:

case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                // construct a string from the valid bytes in the buffer
                String readMessage = new String(readBuf, 0, msg.arg1);
                mTextView.setText(readMessage);                         //added by AMJ in attempt to display variable in textview
                break;
我似乎不知道如何编程android应用程序来区分字符串之间的差异,因此当我收到Temp1字符串时,它会转到Temp1TextView,Temp2字符串会转到Temp2TextView,等等。我是否应该添加一个特殊字符作为从MSP430发送的第一位,并在Android中引用这一点来确定它应该去哪里?只是一个想法

非常感谢您的帮助

编辑:我想我可以尝试将int转换为字符串,然后使用标记器将其分离,然后将其转换回int。但是,应用程序现在在通过蓝牙接收数据时崩溃。下面是我用来转换它的代码。知道它为什么会崩溃吗

bytes = mmInStream.read(buffer);

                byteString = String.valueOf(bytes);

                StringTokenizer tokens = new StringTokenizer(byteString, ":");
                String first = tokens.nextToken();      // this will contain exhaust temp
                String second = tokens.nextToken();     // this will contain damper position

                separatebytes1 = Integer.valueOf(first);
                    separatebytes2 = Integer.valueOf(second);

                // Read from the InputStream
              //  bytes = mmInStream.read(buffer);

                // Send the obtained bytes to the UI Activity
           //     mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
           //             .sendToTarget();

                mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, separatebytes1, -1, buffer)
                .sendToTarget();
这是坠机事故的记录:

W/dalvikvm(24850): threadid=11: thread exiting with uncaught exception (group=0x
411ae300)
E/AndroidRuntime(24850): FATAL EXCEPTION: Thread-1286
E/AndroidRuntime(24850): java.util.NoSuchElementException
E/AndroidRuntime(24850):        at java.util.StringTokenizer.nextToken(StringTok
enizer.java:208)
E/AndroidRuntime(24850):        at com.example.android.BluetoothChat.BluetoothCh
atService$ConnectedThread.run(BluetoothChatService.java:411)
W/ActivityManager(  270):   Force finishing activity com.example.android.Bluetoo
thChat/.BluetoothChat

您可能有一条消息,其中包含多个预定义顺序的值,或者您必须告诉接收者(应用程序)下一步发送的值,大致如您所建议的。

您可能有一条消息,其中包含多个预定义顺序的值,或者您必须告诉接收者(应用程序)下一步发送的值,大致如您所建议。

崩溃(关于您编辑的问题)很可能发生,因为ByTestString不包含“:”。如果是这样的话,你的
String second=tokens.nextToken()
将完全抛出您发布的致命异常

因此,在使用
tokens.nextToken()
分隔字符串之前,请检查bytestring中有多少令牌,方法是:
tokens.countTokens

崩溃(关于您编辑的问题)很可能发生,因为byteString不包含“:”。如果是这样的话,你的
String second=tokens.nextToken()
将完全抛出您发布的致命异常

因此,在使用
tokens.nextToken()
分隔字符串之前,请检查bytestring中有多少令牌,方法是:
tokens.countTokens

欢迎来到SO。一般来说,在问题中包含代码片段是有帮助的,因为它有助于隔离问题,甚至可以使问题更容易理解。通过使用代码块、重要注释上的文本强调等,尝试将您的问题格式化。谢谢您的提示。我添加了我认为与问题相关的代码部分。我试图将其保持在合理的数量,并且不要添加太多。@AlexTrebek请发布崩溃时显示的异常。提示:我在这上面花的时间是无偿的@ClassStacker异常已发布。它来自logcat。我还没有尝试过用Android进行调试,但我相信这是重要的信息。再次感谢。@AlexTrebek正如您在StringTokenizer的文档中所看到的,此异常是由
nextToken()
引发的,这意味着字符串中没有三个标记。在这里或那里有一条日志消息,特别是将收到的字节字符串打印到日志中,怎么样?欢迎使用SO。一般来说,在问题中包含代码片段是有帮助的,因为它有助于隔离问题,甚至可以使问题更容易理解。通过使用代码块、重要注释上的文本强调等,尝试将您的问题格式化。谢谢您的提示。我添加了我认为与问题相关的代码部分。我试图将其保持在合理的数量,并且不要添加太多。@AlexTrebek请发布崩溃时显示的异常。提示:我在这上面花的时间是无偿的@ClassStacker异常已发布。它来自logcat。我还没有尝试过用Android进行调试,但我相信这是重要的信息。再次感谢。@AlexTrebek正如您在StringTokenizer的文档中所看到的,此异常是由
nextToken()
引发的,这意味着字符串中没有三个标记。在这里或那里有一条日志消息,特别是将收到的字节字符串打印到日志中,怎么样?谢谢您的快速响应。理想情况下,MSP430不会连续发送相同的代码。目前,温度数据每30秒发送一次,但压力只有在变化时才会发送。我可以将C代码更改为同时刷新所有代码,这样我就可以预先定义顺序,但如果我可以在数据之前发送某种标识符,以便应用程序知道将其放置在何处,这将非常有用。正如您所建议的,我正试图发送一条消息,消息之间用“:”分隔然后使用标记器在冒号处将其拆分。但现在我崩溃了。我把代码贴在上面了。你知道是什么导致了这次车祸吗?谢谢。谢谢你的快速回复。理想情况下,MSP430不会连续发送相同的代码。目前,温度数据每30秒发送一次,但压力只有在变化时才会发送。我可以将C代码更改为同时刷新所有代码,这样我就可以预先定义顺序,但如果我可以在数据之前发送某种标识符,以便应用程序知道将其放置在何处,这将非常有用。正如您所建议的,我正试图发送一条消息,消息之间用“:”分隔然后使用标记器在冒号处将其拆分。但现在我崩溃了。我把代码贴在上面了。你知道是什么导致了这次车祸吗?谢谢。谢谢你基本上重复了我在一家公司写的东西
W/dalvikvm(24850): threadid=11: thread exiting with uncaught exception (group=0x
411ae300)
E/AndroidRuntime(24850): FATAL EXCEPTION: Thread-1286
E/AndroidRuntime(24850): java.util.NoSuchElementException
E/AndroidRuntime(24850):        at java.util.StringTokenizer.nextToken(StringTok
enizer.java:208)
E/AndroidRuntime(24850):        at com.example.android.BluetoothChat.BluetoothCh
atService$ConnectedThread.run(BluetoothChatService.java:411)
W/ActivityManager(  270):   Force finishing activity com.example.android.Bluetoo
thChat/.BluetoothChat