1

次のコードがあり、\n を受け取るまで、受信したバイトを文字列に保存しようとしています。

 byte[] buffer = new byte[1024];
                int bytes;
                String ReceivedMessage = null;
                while (true) {

                    try

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

                        ReceivedMessage = ReceivedMessage + getString(bytes);
                        // Send the obtained bytes to the UI Activity
                        if(ReceivedMessage.endsWith("\\n")) {
                            String StringToReturn = ReceivedMessage.replace("\\n","");

                            Message msg = mHandler.obtainMessage(AbstractActivity.MESSAGE_READ);
                            Bundle bundle = new Bundle();
                            bundle.putString("Message", StringToReturn);
                            msg.setData(bundle);
                            mHandler.sendMessage(msg);

                            //mHandler.obtainMessage(AbstractActivity.MESSAGE_READ, bytes, -1, buffer)
                            //        .sendToTarget();
                        }

                } catch (IOException e) {
                    e.printStackTrace();
                    connectionLost();
                    BluetoothService.this.stop();
                    break;
                }

ReceivedMessage = ReceivedMessage + getString(bytes);問題は、より正確には でクラッシュしていることですgetString(bytes)

修正するのを手伝ってもらえますか?

ありがとう!

4

2 に答える 2

0
String TempString = new String(buffer,0,bytes);
ReceivedMessage = ReceivedMessage + TempString;
于 2015-04-15T03:18:29.680 に答える
0

コメントを投稿できないため、これを編集します。

バッファを一度だけ読み取ることができ、

バイト = mmInStream.read(バッファ);

実際に同じバッファである場合、内容を読み取ります。わかりにくい。

while(true)また、これは最終的に例外をトリガーすることも意味します。

[編集]

スタックトレースとは何ですか? getString は何を呼び出しますか? なぜ抜け道なく「while(真)」を使っているのですか?StreamBuffer から 2 回読み取ろうとしていますか?

(これはコメントになりますが、十分な担当者がいません)

于 2015-04-15T02:33:23.130 に答える