之前在論壇裏面求助了關於監聽數據接收的問題,因爲第一次做這方面,可能我提的問題太簡單了,大神都不願意回答我,(之前的帖子)晚上翻牆瀏覽網站發現問題的解決辦法,
原文是:最近老闆讓弄安卓和一塊板子通信,現在的情況是我第一次發送數據可以接受到(一些參數的初始化),然後我再發送數據,就接收不到了,數據肯定是發送成功了,只是我的邏輯代碼有問題(新手,懂的較少),因爲我退出瞭然後再進入程序數據就接收到了,不知道如何實現線程內的代碼一直處於監聽狀態,我的代碼:
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
UsbRequest request = new UsbRequest();
boolean initilzed = request.initialize(conn, endpointIn);
System.out.println(initilzed);
ByteBuffer buffer = ByteBuffer.allocate(38);
request.queue(buffer, 38);
while (initilzed) {
if (conn.requestWait().equals(request)) {
byte[] data = buffer.array();
conn.bulkTransfer(endpointIn, data, 38, 1000);
// System.out.println(data.toString());
final String message = "Read " + data.length + " bytes: \n"
+ HexDump.dumpHexString(data) + "\n\n";
System.out.println(message);
}
}
}
};
現在說下解決辦法:其實很簡單,就是loop循環裏面執行異步任務:
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// System.out.println("進入線程了");
while (true) {
synchronized (this) {
UsbRequest request = new UsbRequest();
request.initialize(conn, endpointIn);
ByteBuffer buffer = ByteBuffer.allocate(38);
request.queue(buffer, 38);
if (conn.requestWait().equals(request)) {
byte[] data = buffer.array();
conn.bulkTransfer(endpointIn, data, 38, 1000);
final String message = "Read " + data.length
+ " bytes: \n" + HexDump.dumpHexString(data)
+ "\n\n";
System.out.println(message);
}
}
}
}
};
高手見諒,權當是自己記錄的一點心得,畢竟網上別人關於這方面資料少,具體的例子也沒有。