0

文字列を分割するさまざまな方法を見てきました。この投稿から両方を試しました。

次の文字列を読み取って分割しようとしています:{2b 00 00}

最も一般的なケースは「:」で区切られたメッセージを分割することですが、この場合、私のメッセージはスペースで区切られています。

通常のsplit()関数またはStringTokenizerスペースが原因であると思われる「nullpointerexception」を取得しています。

private String splitReceivedString(String s) {
    String[] separated = s.split(" ");
    return separated[1];
}

この種の文字列の値を取得するにはどうすればよいですか?

考えられる問題のあるコードを追加

あなたの回答のいくつかを確認した後、問題は Bluetooth 入力ストリームに起因することがわかりました。そこからnull値を取得しています。したがって、メッセージを受信するために使用しているコードは次のとおりです。

コードは bluetoothChat の例とほぼ同じです。しかし、それは私のプログラムに適応するように修正されているので、何か問題があるかもしれません.

{2b 00 00}別の文字列を送信すると、この文字列を返す MCU があります。これはで行われていると思いますconnectedThread

public class ConnectedThread extends Thread {

   public void run() {
    byte[] buffer = new byte[1024];  // buffer store for the stream
    int bytes; // bytes returned from read()

    /**Keep listening to the InputStream until an exception occurs*/
    while (true) {
        try {
            /**Read from the InputStream*/
            bytes = GlobalVar.mmInStream.read(buffer);

            /**Send the obtained bytes to the UI activity*/
            GlobalVar.mHandler.obtainMessage(GlobalVar.MESSAGE_READ, bytes, -1, buffer).sendToTarget();

したがって、これはメイン アクティビティのハンドラ関数に文字列を送信しています。

    public final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case GlobalVar.MESSAGE_STATE_CHANGE:
                //The code here is irelevant
            case  GlobalVar.MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;
                /**construct a string from the buffer*/
                String writeMessage = new String(writeBuf);
                GlobalVar.mCommunicationArrayAdapter.add(writeMessage);
                break;
            case  GlobalVar.MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                /**construct a string from the valid bytes in the buffer*/
                String readMessage = new String(readBuf);
                GlobalVar.mCommunicationArrayAdapter.add(readMessage);
                GlobalVar.readString = readMessage;                    
                break;

次に、変数GlobalVar.readStringは分割関数で取得しているものです。

    private String splitReceivedString (String s) {

        String[] separated = s.split(" ");
        return separated[1];
    }

    receive1 = splitReceivedString (GlobalVar.readString);

つまり、受信した文字列を正しく読み取っていないということであり、修正方法がわかりません。

4

4 に答える 4

0

デバッグする出力 (System.out.println またはその他) を挿入します。

  • あなたのは何ですか

  • 分離された要素はいくつありますか

  • 何が分離されているか [0] (要素が 1 つしかない場合)

使ってみて

s.split("\\s");

任意の空白で分割します。

于 2013-08-07T14:51:09.100 に答える