文字列を分割するさまざまな方法を見てきました。この投稿から両方を試しました。
次の文字列を読み取って分割しようとしています:{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);
つまり、受信した文字列を正しく読み取っていないということであり、修正方法がわかりません。