title: java.lang.NumberFormatException: Invalid int: “”
body: <p>Android App:</p>
  
  <pre><code> private static final String TAG = "HC-05";   
    Button btnReceive;
    TextView txtReading;
    Handler h;
    ImageView imv1, imv2, imv3, imv4;
    int s1=0, s2=0;
  
    final int RECIEVE_MESSAGE = 1;        // Status  for Handler
    private BluetoothAdapter btAdapter = null;
    private BluetoothSocket btSocket = null;
    private StringBuilder sb = new StringBuilder();
  
    private ConnectedThread mConnectedThread;
  
    // SPP UUID service
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  
    // MAC-address of Bluetooth module (you must edit this line)
    private static String address = "98:D3:31:80:57:0D";
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main); 
  
  
  
      imv1 =(ImageView) findViewById(R.id.imageView1);
      imv2 =(ImageView) findViewById(R.id.imageView2);
      imv3 =(ImageView) findViewById(R.id.imageView3);
      imv4 =(ImageView) findViewById(R.id.imageView4);
          btnReceive = (Button) findViewById(R.id.btnReceive);                // button LED OFF
          txtReading = (TextView) findViewById(R.id.txtReading);
  
           h = new Handler() {
                  public void handleMessage(android.os.Message msg) {
                      switch (msg.what) {
                      case RECIEVE_MESSAGE:                                                   // if receive massage
                          byte[] readBuf = (byte[]) msg.obj;
                          String strIncom = new String(readBuf, 0, msg.arg1);                 // create string from bytes array
                          sb.append(strIncom);                                                // append string
                          int endOfLineIndex = sb.indexOf("\r\n");                            // determine the end-of-line
                          if (endOfLineIndex &gt; 0) {                                            // if end-of-line,
                              String sbprint = sb.substring(0, endOfLineIndex);               // extract string
                              sb.delete(0, sb.length());                                      // and clear
                              txtReading.setText("Data from Arduino: " + sbprint);
                              //System.out.println(sbprint);
                              **if(sbprint!=null || !"0".equals(sbprint)){
                                   s2 = Integer.parseInt(sbprint);
                                   initOpacity();
                              }**
  
                              // update TextView
                              btnReceive.setEnabled(true);
  
                             // if(!"".equals(sbprint)){
  
                           //   }
                            //  else
                           //   {
                            //    s2=0;
                            //  }
  
                               System.out.println("================== VAlUE BT = " +s2+ "===================");
  
                          }
  
  
                          //Log.d(TAG, "...String:"+ sb.toString() +  "Byte:" + msg.arg1 + "...");
                          break;
                      }
                  };
              };
  
  
              btAdapter = BluetoothAdapter.getDefaultAdapter();       // get Bluetooth adapter
              checkBTState();
  
          /*    btnReceive.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    btnReceive.setEnabled(false);
                    mConnectedThread.write("1");    // Send "1" via Bluetooth
                  //Toast.makeText(getBaseContext(), "Turn on LED", Toast.LENGTH_SHORT).show();
                }
              });*/
  
  
  
  
      }
  
  
       private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
            if(Build.VERSION.SDK_INT &gt;= 10){
                try {
                    final Method  m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
                    return (BluetoothSocket) m.invoke(device, MY_UUID);
                } catch (Exception e) {
                    Log.e(TAG, "Could not create Insecure RFComm Connection",e);
                }
            }
            return  device.createRfcommSocketToServiceRecord(MY_UUID);
        }
  
        @Override
        public void onResume() {
          super.onResume();
  
          Log.d(TAG, "...onResume - try connect...");
  
          // Set up a pointer to the remote node using it's address.
          BluetoothDevice device = btAdapter.getRemoteDevice(address);
  
          // Two things are needed to make a connection:
          //   A MAC address, which we got above.
          //   A Service ID or UUID.  In this case we are using the
          //     UUID for SPP.
  
          try {
              btSocket = createBluetoothSocket(device);
          } catch (IOException e) {
              errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
          }
  
          // Discovery is resource intensive.  Make sure it isn't going on
          // when you attempt to connect and pass your message.
          btAdapter.cancelDiscovery();
  
          // Establish the connection.  This will block until it connects.
          Log.d(TAG, "...Connecting...");
          try {
            btSocket.connect();
            Log.d(TAG, "....Connection ok...");
          } catch (IOException e) {
            try {
              btSocket.close();
            } catch (IOException e2) {
              errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
            }
          }
  
          // Create a data stream so we can talk to server.
          Log.d(TAG, "...Create Socket...");
  
          mConnectedThread = new ConnectedThread(btSocket);
          mConnectedThread.start();
        }
  
        @Override
        public void onPause() {
          super.onPause();
  
          Log.d(TAG, "...In onPause()...");
  
          try     {
            btSocket.close();
          } catch (IOException e2) {
            errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
          }
        }
  
        private void checkBTState() {
          // Check for Bluetooth support and then check to make sure it is turned on
          // Emulator doesn't support Bluetooth and will return null
          if(btAdapter==null) {
            errorExit("Fatal Error", "Bluetooth not support");
          } else {
            if (btAdapter.isEnabled()) {
              Log.d(TAG, "...Bluetooth ON...");
            } else {
              //Prompt user to turn on Bluetooth
              Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
              startActivityForResult(enableBtIntent, 1);
            }
          }
        }
  
        private void errorExit(String title, String message){
          Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
          finish();
        }
  
        private class ConnectedThread extends Thread {
              private final InputStream mmInStream;
              private final OutputStream mmOutStream;
  
              public ConnectedThread(BluetoothSocket socket) {
                  InputStream tmpIn = null;
                  OutputStream tmpOut = null;
  
                  // Get the input and output streams, using temp objects because
                  // member streams are final
                  try {
                      tmpIn = socket.getInputStream();
                      tmpOut = socket.getOutputStream();
                  } catch (IOException e) { }
  
                  mmInStream = tmpIn;
                  mmOutStream = tmpOut;
              }
  
              public void run() {
                  byte[] buffer = new byte[256];  // 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 = mmInStream.read(buffer);        // Get number of bytes and message in "buffer"
                          h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Send to message queue Handler
                      } catch (IOException e) {
                          break;
                      }
                  }
              }
  
              /* Call this from the main activity to send data to the remote device */
              public void write(String message) {
                  Log.d(TAG, "...Data to send: " + message + "...");
                  byte[] msgBuffer = message.getBytes();
                  try {
                      mmOutStream.write(msgBuffer);
                  } catch (IOException e) {
                      Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
                    }
              }
          }
  
        public void initOpacity()
          {
  
  
            if( s2 &lt; 100)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha1);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 100 &amp;&amp; s2 &lt; 200)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha2);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 200 &amp;&amp; s2 &lt; 300)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha3);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 300 &amp;&amp; s2 &lt; 400)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha4);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 400 &amp;&amp; s2 &lt; 500)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha5);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 500 &amp;&amp; s2 &lt; 600)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha6);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 600 &amp;&amp; s2 &lt; 700)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha7);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 700 &amp;&amp; s2 &lt; 800)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha8);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 800 &amp;&amp; s2 &lt; 900)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha9);
              imv1.startAnimation(an);
          }
          else if(s2 &gt; 900)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha10);
              imv1.startAnimation(an);            
          }
  
  
          //i2
  
          if( s2 &lt; 100)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha1);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 100 &amp;&amp; s2 &lt; 200)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha2);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 200 &amp;&amp; s2 &lt; 300)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha3);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 300 &amp;&amp; s2 &lt; 400)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha4);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 400 &amp;&amp; s2 &lt; 500)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha5);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 500 &amp;&amp; s2 &lt; 600)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha6);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 600 &amp;&amp; s2 &lt; 700)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha7);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 700 &amp;&amp; s2 &lt; 800)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha8);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 800 &amp;&amp; s2 &lt; 900)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha9);
              imv2.startAnimation(an);
          }
          else if(s2 &gt; 900)
          {
              Animation an = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha10);
              imv2.startAnimation(an);            
          }
  
  
  
          //Right Foot Blank
          Animation an1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha0);
          imv3.startAnimation(an1);
          Animation an2 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha0);
          imv4.startAnimation(an2);    
          }
  
  
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      int id = item.getItemId();
      if (id == R.id.action_settings) {
          return true;
      }
      return super.onOptionsItemSelected(item);
  }}
  </code></pre>
  
  <p>Arduino Bluetooth:</p>
  
  <pre><code>#include &lt;SoftwareSerial.h&gt;// import the serial library
  SoftwareSerial Genotronex(10, 11); // RX, TX
  
  int BluetoothData; // the data given from Computer
  int sensorPin = A0;
  int sensorValue = 0;
  int ledPin = 13;  
  
  
  void setup() {
  Genotronex.begin(9600);
  pinMode(ledPin, OUTPUT);
  }
  
  void loop() {
    // put your main code here, to run repeatedly:
  sensorValue = analogRead(sensorPin);
  
  
  
  Genotronex.println(sensorValue);
  
  delay(500);
  
  }
  </code></pre>
  
  <p>logcat:</p>
  
  <pre><code>01-29 17:17:11.637: I/System.out(1776): ================== VAlUE BT = 0===================
  01-29 17:17:11.797: I/System.out(1776): ================== VAlUE BT = 777===================
  01-29 17:17:12.327: I/System.out(1776): ================== VAlUE BT = 975===================
  01-29 17:17:12.807: I/System.out(1776): ================== VAlUE BT = 669===================
  01-29 17:17:13.327: I/System.out(1776): ================== VAlUE BT = 971===================
  01-29 17:17:13.817: I/System.out(1776): ================== VAlUE BT = 224===================
  01-29 17:17:14.327: D/AndroidRuntime(1776): Shutting down VM
  01-29 17:17:14.327: E/AndroidRuntime(1776): FATAL EXCEPTION: main
  01-29 17:17:14.327: E/AndroidRuntime(1776): Process: com.example.blutooth, PID: 1776
  01-29 17:17:14.327: E/AndroidRuntime(1776): java.lang.NumberFormatException: Invalid int: "
  "
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.Integer.invalidInt(Integer.java:138)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.Integer.parse(Integer.java:410)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.Integer.parseInt(Integer.java:367)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.Integer.parseInt(Integer.java:334)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at com.example.blutooth.MainActivity$1.handleMessage(MainActivity.java:88)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at android.os.Handler.dispatchMessage(Handler.java:102)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at android.os.Looper.loop(Looper.java:145)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at android.app.ActivityThread.main(ActivityThread.java:5944)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.reflect.Method.invoke(Native Method)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at java.lang.reflect.Method.invoke(Method.java:372)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
  01-29 17:17:14.327: E/AndroidRuntime(1776):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
  </code></pre>
  
  <p>I have the app crashing when the value of the sensor is below 10.
  I tried to filter the 's2' to be filled with the data from the arduino, only when there is an integer value. but somehow it still crashes with the same error.
  Am I missing something here?</p>