Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android InputStream无法从蓝牙HC-05接收整个消息_Java_Android_Multithreading_Android Service_Inputstream - Fatal编程技术网

Java Android InputStream无法从蓝牙HC-05接收整个消息

Java Android InputStream无法从蓝牙HC-05接收整个消息,java,android,multithreading,android-service,inputstream,Java,Android,Multithreading,Android Service,Inputstream,我的问题是从android应用程序接收数据,我从Arduino发送数据,就像{166;122;33;5;n} 当我用Android打开一个套接字时,它会接收到前9或10个字节,并向我显示这样的数据;122;33 想知道如何在InputStream中接收所有信息。 负责此操作的函数是beginListenForData(),如下所示 我使用了两个全局变量。在此方法中,字节[]缓冲区=新字节[256];//流int字节的缓冲区存储;//从read()返回的字节是的,我得到了这个概念,它可以工作:)

我的问题是从android应用程序接收数据,我从Arduino发送数据,就像{166;122;33;5;n} 当我用Android打开一个套接字时,它会接收到前9或10个字节,并向我显示这样的数据;122;33 想知道如何在InputStream中接收所有信息。 负责此操作的函数是beginListenForData(),如下所示



我使用了两个全局变量。在此方法中,字节[]缓冲区=新字节[256];//流int字节的缓冲区存储;//从read()返回的字节是的,我得到了这个概念,它可以工作:)谢谢Pratik:)
  void beginListenForData() {
    final Handler handler = new Handler();
    stopThread = false;
    Thread thread = new Thread(new Runnable() {
        public void run() {
            while (!Thread.currentThread().isInterrupted() && !stopThread) {
                try {
                    final int byteCount = inputStream.available();
                    if (byteCount > 0) {
                        byte[] rawBytes = new byte[byteCount];
                        inputStream.read(rawBytes);
                        final String str = new String(rawBytes);
                        handler.post(new Runnable() {
                            public void run() {
                                if (str.charAt(0) == '{') {
                                    try {
                                        bytes = inputStream.read(buffer, 0, 
                                                                 buffer.length);
                                        String readMessage1 = new String(buffer,   
                                                          0, bytes, "US-ASCII");
                                        Log.e("bytes ",  
                                              Integer.toString(bytes));
                                        Log.e("tag:", readMessage1);
                                        sendMessage(readMessage1);

                                    } catch (IOException e) {
                                        e.printStackTrace();
                                        Log.e("tag", "failed");
                                    }
                                }


                            }
                        });

                    }
                } catch (IOException ex) {
                    sendMessage("F");
                    stopThread = true;
                }
            }
        }
    });

    thread.start();
}
> Try something like:

      void beginListenForData() {
        final Handler handler = new Handler();
        stopThread = false;
        Thread thread = new Thread(new Runnable() {
            public void run() {
                while (!Thread.currentThread().isInterrupted() && !stopThread) {
         try {
                            byte[] buffer = new byte[1];
                            bytes = mmInStream.read(buffer, 0, 1);
                            String read = new String(buffer, 0, 1);
                            readMessage.append(read);
                            if (buffer[0] == '}') {
                                bytes = mmInStream.read(buffer, 0, 1);

                                    readMessage.append(read);
      String readMessage1 = new String(buffer,   
                                                              0, bytes, "US-ASCII");
                                            Log.e("bytes ",  
                                                  Integer.toString(bytes));

                                            sendMessage(readMessage);

                                        } catch (IOException e) {
                                            e.printStackTrace();
                                            Log.e("tag", "failed");
                                        }



                                }
                            });

                        }
                    } catch (IOException ex) {
                        sendMessage("F");
                        stopThread = true;
                    }
                }
            }
        });

        thread.start();
    }