2015-02-27 3 views
0

Я всю ночь искал эту проблему, так как это мой первый раз, когда я использую arduino и android. Мой вопрос в том, как я могу преобразовать переменную data * String to int? Я получаю NumberFormatException всякий раз, когда я делаю: int pulse = Integer.ParseInt(data);Преобразование строки из массива байтов в int

Моя цель здесь, чтобы быть в состоянии получить данные, поступающие из Arduino и иметь его как целое число, для меня, чтобы иметь возможность сравнить его.

ДОПОЛНИТЕЛЬНО: Переменные «данные» - это частота пульса. Мне нужно преобразовать его в int, чтобы я мог сравнить значение, если частота пульса по-прежнему нормальная или нет. После нескольких часов поиска я узнал, что то, что я пытаюсь преобразовать в int, не является чисто строкой, поскольку оно появилось из arduino, теперь моя проблема заключается в том, как сделать переменную «данные» целой.

Это мой код:

public void run() 
     {     
      while(!Thread.currentThread().isInterrupted() && !stopWorker) 
      { 
       try 
       { 
        final int bytesAvailable = mmInputStream.available();       
        if(bytesAvailable > 0) 
        { 
         byte[] packetBytes = new byte[bytesAvailable]; 
         mmInputStream.read(packetBytes); 
         for(i=0;i<bytesAvailable;i++) 
         { 
          byte b = packetBytes[i]; 
          if(b == delimiter) 
          { 
           final byte[] encodedBytes = new byte[readBufferPosition]; 
           System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
           final String data = new String(encodedBytes, "US-ASCII"); 
           readBufferPosition = 0; 

           handler.post(new Runnable() 
           { 
            public void run() 
            { 

             Intent i = new Intent(Bluetooth.this, Home.class); 
             i.putExtra("theBPM",data); 
             startActivity(i); 
            } 
           }); 
          } 
          else 
          { 
           readBuffer[readBufferPosition++] = b; 
          } 
         } 
        } 
       } 
       catch (IOException ex) 
       { 
        stopWorker = true; 
       } 
      } 
     } 
    }); 

    workerThread.start(); 

Спасибо.

+0

Ну, если вы запустили 'parseInt' на String и получили это исключение, то ваш' String' не является чисто числом. Итак, как вы можете преобразовать его в числовое представление? – Kon

+0

Какая у вас строка? – JClassic

+0

Проблема заключается в ваших входных данных, это не представление int, – Zielu

ответ

0

Try печать/регистрация/делая тост, чтобы увидеть, что находится в данных. Это может произойти только тогда, когда данные имеют символы, отличные от цифр, или могут иметь двойное (десятичное) значение в данные. Для этого вам может понадобиться использовать Double.parseDouble (данные).

+0

Woah. Вот и все! Как вы узнали, что моя переменная не может быть целым? – Rosselle

+0

Я пробовал все возможные случаи для генерации NumberFormatException. Integer.parseInt (данные) даже работает для отрицательных целых чисел :) Удачи. – busybug91

1

Мы предполагаем, что проблема в String для int, и вы уже вошли в режим отладки или сделали сообщение Toast, что вы получаете представление строки, как ожидалось.

Вы можете попробовать следующий вариант:

  • Вы можете проверить, если у вас есть данные для разбора
  • Удалить ненужные пробелы (обрезать или String.split)
  • Создать вспомогательный метод для проверки Строка, если это допустимое числовое https://stackoverflow.com/a/5439547/3448799
Смежные вопросы