之前在论坛里面求助了关于监听数据接收的问题,因为第一次做这方面,可能我提的问题太简单了,大神都不愿意回答我,(之前的帖子)晚上FQ浏览网站发现问题的解决办法,

原文是:最近老板让弄安卓和一块板子通信,现在的情况是我第一次发送数据可以接受到(一些参数的初始化),然后我再发送数据,就接收不到了,数据肯定是发送成功了,只是我的逻辑代码有问题(新手,懂的较少),因为我退出了然后再进入程序数据就接收到了,不知道如何实现线程内的代码一直处于监听状态,我的代码:

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);
					}
				}

			}

		}
	};

高手见谅,权当是自己记录的一点心得,毕竟网上别人关于这方面资料少,具体的例子也没有。


版权声明:本文为sowhat4999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sowhat4999/p/4439864.html