title: Bluetooth Socket OutputStream NullPointerException when calling Write()
body: <p>I have a strange issue where apparently my outputstream is null even though I have multiple checks and have used the debugger to confirm it is not null. So the code in question:</p>
  
  <pre><code> @Override
  protected void onHandleIntent(Intent intent) {
      device = (BluetoothDevice) intent.getExtras().get("device");
  
      if (device != null) {
          Log.v("DeviceManager", "Beginning attempts to communicate to: " + device.getName());
          try {
              BluetoothSocket socket = device.createRfcommSocketToServiceRecord(device.getUuids()[0].getUuid());
              outputStream = socket.getOutputStream();
              inputStream = socket.getInputStream();
  
              while (Utils.appIsInForeground &amp;&amp; device != null) {
                  if (outputStream == null){
                      Log.e("DeviceManager", "Looks like the outputStream is null...");
                      if (inputStream == null){
                          Log.e("DeviceManager", "And input stream is null, are you even connected to the device?");
                      }else{
                          Log.e("DeviceManager", "Although strangely, input stream has been set.");
                      }
                  }else{
                      String myString = "This is a string!";
                      byte[] myByteArray = myString.getBytes("UTF-8");
                      //Crashes here:
                      outputStream.write(myByteArray);
                  }
                  Thread.sleep(1000);
              }
  
          } catch (IOException e) {
              e.printStackTrace();
              Log.e("DeviceManager", "Can't create a socket to the bluetooth device.");
          } catch (InterruptedException e) {
              e.printStackTrace();
              Log.e("DeviceManager", "The sleep thread was interrupted.");
          } catch (NullPointerException e) {
              e.printStackTrace();
              Log.e("DeviceManager", "A null pointer exception, this is probably not good.");
          }
      }else {
          Log.e("DeviceManager", "The Device Manager has been passed a null object instead of a device.");
      }
  }
  </code></pre>
  
  <p>The stack trace is as follows:</p>
  
  <pre><code>03-23 15:55:12.134 3042-3171/com.name.app W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[], int, int)' on a null object reference
  03-23 15:55:12.135 3042-3171/com.name.app W/System.err:     at android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:553)
  03-23 15:55:12.136 3042-3171/com.name.app W/System.err:     at android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:85)
  03-23 15:55:12.136 3042-3171/com.name.app W/System.err:     at java.io.OutputStream.write(OutputStream.java:75)
  03-23 15:55:12.137 3042-3171/com.name.app W/System.err:     at com.name.app.service.DeviceManager.onHandleIntent(DeviceManager.java:73)
  03-23 15:55:12.138 3042-3171/com.name.app W/System.err:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:67)
  03-23 15:55:12.138 3042-3171/com.name.app W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
  03-23 15:55:12.139 3042-3171/com.name.app W/System.err:     at android.os.Looper.loop(Looper.java:154)
  03-23 15:55:12.139 3042-3171/com.name.app W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
  </code></pre>
  
  <p>This what the debugger thinks of each of the variables:</p>
  
  <pre><code>myByteArray = {byte[17]@4799} 
  this = {DeviceManager@4698} 
  intent = {Intent@4705} "Intent { cmp=com.name.app/.service.DeviceManager (has extras) }"
  socket = {BluetoothSocket@4706} 
  myString = "This is a string!"
  myByteArray = {byte[17]@4799} 
  outputStream = {BluetoothOutputStream@4743} 
  </code></pre>
  
  <p>I'm utterly baffled at this point, nothing is null yet the error persists. I have also tried the following:</p>
  
  <pre><code>outputStream.write(myByteArray, 0, myByteArray.length);
  </code></pre>
  
  <p>It produces the exact same trace.</p>