我正在开发一个应用程序,它通过蓝牙(来自Arduino和Android手机)接收xml作为String。
我从蓝牙中收到无效/不完整的字符串。 蓝牙被定义为Android服务。 每次我收到一个字符串,它不是原来的形式没有我从arduino或其他Android手机发送它。 xml解析函数正常工作我已经检查过了。
这是我的代码,我收到字符串
mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // if receive massage
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\n"); // determine the end-of-line
if (endOfLineIndex > 0) { // if end-of-line,
String sbprint = sb.substring(0, endOfLineIndex); // extract string
sendXML(sbprint); // this method is for sending the xml string
sb.delete(0, sb.length()); // and clear
}
Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "...");
Log.d("IncString", strIncom);
break;
}
};
};
以下是我正在使用的xml字符串
<head><hbt v='100'/><hrg v='75'/></head>
我总是收到字符串但不完整,例如**v='100'/><hrg v='75'**
或**</head>**
如果问题不明确,请告诉我任何事情我会更新
提前thanx
答案 0 :(得分:1)
尝试使用代码中第92行中的while(true)语句:http://code.google.com/p/android-arduino/source/browse/garduino/android/src/net/morrildl/garduino/CommThread.java
答案 1 :(得分:1)
我使用以下代码成功完成了这个...
byte[] buffer = new byte[128]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
bytes = mmInStream.read(buffer);
byte[] readBuf = (byte[]) buffer;
String strIncom = new String(readBuf, 0, bytes); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line
if (endOfLineIndex > 0) {
// add the current string to eol to a local string
String sbprint = sb.substring(0, endOfLineIndex);
// get the start and end indexes of the heading
int startHeading = sb.indexOf("HE");
int endHeading = sb.indexOf("/HE");
// set the heading
blahblah.setCurrentHeading(sb.substring((startHeading + 2), endHeading));
....
然后,我从arduino发送的文本中检索了我想要的所有信息后,我打电话:
sb.delete(0, sb.length());
来自我的adruino的字符串如下所示:::
void taskTransmitData(void)
{
// start the xml
Serial.print("HE");
Serial.print(pMyMemory->currentHeading);
Serial.print("/HE");
.....
Serial.println();
}
希望这会有所帮助......