Я видел различные методы разделения строки. Я пробовал как с this.Отделите строку пробелом
Я пытаюсь прочитать и разделить следующую строку: {2b 00 00}
я вижу, что наиболее распространенный случай, чтобы разделить сообщение, разделенные «:», но в этом случае, мое сообщение разделенных пробелами ,
Стараясь оба пути, с регулярной split()
функции или с StringTokenizer
я получаю «NullPointerException», что я supose, что является причиной, из-за пространства:
private String splitReceivedString(String s) {
String[] separated = s.split(" ");
return separated[1];
}
Как я могу получить значения этот тип струны?
ADDED КОД С ВОЗМОЖНАЯ ПРОБЛЕМА
После проверки некоторые из ваших ответов, я понимаю, что проблема исходит от связи Bluetooth InputStream. Я получаю от него нулевые значения. Итак, вот код, который я использую для получения сообщений:
Код почти такой же, как пример bluetoothChat. Но он модифицирован, чтобы адаптироваться к моей программе, так что, возможно, я что-то не так.
У меня есть MCU, который возвращает мне эту строку {2b 00 00}
, когда я отправляю ей еще одну строку. Я думаю, что это будет сделано в 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);
Итак, дело в том, что он не читает право принимаемой строки, и я не знаю, как это исправить.
Держу пари, вы передаете 'null' методу. – arshajii
@arshajii Что вы имеете в виду? Я прочитал строку, которую хочу разбить с помощью тоста, и является exaccty'2b 00 00' – masmic
@arshajii правильно, я протестировал этот метод, и он отлично работает. Строка, в которой вы проходите, либо отличается от '{2b 00 00}', либо вы передаете нуль. – Brinnis