2017-01-26 1 views
0

j'ai arduino QU'envoyiez 2 int et l'int était séparée par « : » par exemple mon arduino envoyer des données = 12315: 15123ne peut pas convertir la chaîne en int après la réception de données en java

après que j'envoie ces données à l'aide bluetooth, je reçois les données smartphone et j'ai besoin que 2 valeur que je reçois devenir int nouveau c'est était mon code partie sur mon Android

void beginListenForData() 
    { 
     final Handler handler = new Handler(); 
     final byte delimiter = 10; //This is the ASCII code for a newline character 

     stopWorker = false; 
     readBufferPosition = 0; 
     readBuffer = new byte[1024]; 
     workerThread = new Thread(new Runnable() 
     { 
      public void run() 
      { 
       while(!Thread.currentThread().isInterrupted() && !stopWorker) 
       { 
        try 
        { 
         int bytesAvailable = mmInputStream.available(); 
         if(bytesAvailable > 0) 
         { 
          byte[] packetBytes = new byte[bytesAvailable]; 
          mmInputStream.read(packetBytes); 
          for(int i=0;i<bytesAvailable;i++) 
          { 
           byte b = packetBytes[i]; 
           if(b == delimiter) 
           { 

            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() 
             { 

              String[] tmp; 
              String lol,dam; 
              tmp = data.split(":"); 
              try 
              { 


               lol = String.valueOf(crypt[0])+":"+String.valueOf(crypt[1]); 
               derajat.setText(lol); 
              } 
              catch (NumberFormatException nfe) 
              { 
               // bad data - set to sentinel 
               crypt[0] = Integer.MIN_VALUE; 
               crypt[1] = Integer.MIN_VALUE; 
               derajat.setText("none"); 
              } 

              dam = tmp[0]+":"+tmp[1]; 

              myLabel.setText(dam); 
               //derajat.setText(data); 
             } 
            }); 
           } 
           else 
           { 
            readBuffer[readBufferPosition++] = b; 
           } 
          } 
         } 
        } 
        catch (IOException ex) 
        { 
         stopWorker = true; 
        } 
       } 
      } 
     }); 

     workerThread.start(); 
    } 

que vous pouvez voir que, après des données « \ n » seront processus d'abord je diviser en utilisant data.split() et j'obtiens 2 valeur qui stockée dans tmp après que je parse cette valeur à la crypte [0] et crypte [1] i de texte à derajat pour voir ma valeur

et je mets le texte le résultat dans MyLabel trop je peux voir ma valeur en MyLabel mais je ne peux pas le convertir en int parce que je ne vois rien dans l'étiquette derajat quelqu'un peut-il m'aider pourquoi je ne peux pas convertir int après avoir reçu ces données ??

+0

Où est défini 'crypt'? Ne devriez-vous pas utiliser 'temp' aussi? –

+0

J'utilise int [] crypt = new int [10], je l'utilise dans le monde entier parce que j'ai besoin d'utiliser cette valeur dans une autre classe –

Répondre

2

Si les données reçues de votre Arduino est en fait que vous avez spécifié:

"12315: 15123" 

Alors ce qui se passe est que vous obtenez un NumberFormatException que vous ne prises mais vraiment ont aucun moyen de savoir autre que derajat ne contiendra rien (ou "aucun") .... ce qui est exactement ce que vous vivez.

La raison pour laquelle vous obtenez un NumberFormatException est parce qu'il ya un espace blanc directement après les deux points (:) délimiteur donc lorsque vous essayez d'effectuer:

crypt[1] = Integer.parseInt(tmp[1]); 

(tmp [1] en fait contient "15123") a NumberFormatException est levée. La méthode Integer.parseInt() ne gère pas les espaces blancs dans la chaîne numérique. Pour remédier à cette situation de découper vos cordes divisées, par exemple:

crypt[0] = Integer.parseInt(tmp[0].trim()); 
crypt[1] = Integer.parseInt(tmp[1].trim()); 

ou rompu avec:

tmp = data.split(": ");