Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[])' on a null object reference
<p>I'm trying to connect my android application to my Arduino Uno by Bluetooth. In order to make the connection general to the whole application, I created a service where I implemented my Bluetooth functions. 
The problem is that my sendData function is causing an error and don't have any idea on how to resolve it.</p>

<p>Please help me. Thanks in Advance :)</p>

<p>Here is my MainActivity.java :</p>

<pre><code>package llg.trashbin;

import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import android.content.Intent;


public class MainActivity extends AppCompatActivity {

public int objectOut = 0;
communicationEnabled mCommunicate = new communicationEnabled();

Button bottle, emballages, papier;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent mBluetooth = new Intent(MainActivity.this, BluetoothConnectService.class);
    startService(mBluetooth);

    bottle = (Button) findViewById(R.id.bottle);
    emballages = (Button) findViewById(R.id.emballages);
    papier = (Button) findViewById(R.id.papier);

    bottle.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            objectOut = 2;
            mCommunicate.MessageSent();
        }
    });
    emballages.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            objectOut = 3;
            mCommunicate.MessageSent();
        }
    });
    papier.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            objectOut = 5;
            mCommunicate.MessageSent();
        }
    });
}

public class communicationEnabled extends BluetoothConnectService {
    public String hello = "1";

    public void MessageSent() {
        sendData(hello);
    }
}
</code></pre>

<p>}</p>

<p>BluetoothConnectService.java :</p>

<pre><code>package llg.trashbin;

import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;

import android.os.IBinder;
import android.util.Log;

import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;


public class BluetoothConnectService extends Service {

private static final String TAG = "Tripoubelle";

public static final int REQUEST_ENABLE_BT = 1;
public BluetoothAdapter btAdapter = null;
public BluetoothSocket btSocket = null;
public OutputStream outStream = null;

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static String address = "00:13:EF:00:00:4C";

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Log.d(TAG, "In onCreate()");
    super.onCreate();
    btAdapter = BluetoothAdapter.getDefaultAdapter();
    checkBTState();

    Log.d(TAG, "...In onResume - Attempting client connect...");

    BluetoothDevice device = btAdapter.getRemoteDevice(address);

    try {
        btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
    } catch (IOException e) {
        errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
    }

    btAdapter.cancelDiscovery();
    Log.d(TAG, "...Connecting to Remote...");
    try {
        btSocket.connect();
        Log.d(TAG, "...Connection established and data link opened...");
    } catch (IOException e) {
        try {
            btSocket.close();
        } catch (IOException e2) {
            errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
        }
    }

    Log.d(TAG, "...Creating Socket...");

    try {
        outStream = btSocket.getOutputStream();
    } catch (IOException e) {
        errorExit("Fatal Error", "In onResume(), input and output stream creation failed:" + e.getMessage() + ".");
    }
}


public void onPause() {

    Log.d(TAG, "...In onPause()...");

    if (outStream != null) {
        try {
            outStream.flush();
        } catch (IOException e) {
            errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + ".");
        }
    }

    try     {
        btSocket.close();
    } catch (IOException e2) {
        errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
    }
}

public 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 supported. Aborting.");
    } else {
        if (btAdapter.isEnabled()) {
            Log.d(TAG, "...Bluetooth is enabled...");
        } else {
            //Prompt user to turn on Bluetooth
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(enableBtIntent);
        }
    }
}

private void errorExit(String title, String message){
    Toast msg = Toast.makeText(getBaseContext(),
            title + " - " + message, Toast.LENGTH_SHORT);
    msg.show();
    finish();
}

public void sendData(String message) {
    byte[] msgBuffer = message.getBytes();

    Log.d(TAG, "...Sending data: " + message + "...");
    try {
        outStream.write(msgBuffer);
    } catch (IOException e) {
        String msg = "In onResume() and an exception occurred during write: " + e.getMessage();
        if (address.equals("00:13:EF:00:00:4C"))
            msg = msg + ".\n\nUpdate your server address from 00:13:EF:00:00:4C to the correct address on line 37 in the java code";
        msg = msg +  ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n";

        errorExit("Fatal Error", msg);
    }
}
</code></pre>

<p>}</p>

<p>Here is the error :</p>

<pre><code>12-27 10:21:52.511 1178-1178/llg.trashbin E/AndroidRuntime: FATAL EXCEPTION: main
Process:    llg.trashbin, PID: 117
java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[])' on a null object reference
at llg.trashbin.BluetoothConnectService.sendData(BluetoothConnectService.java:125)
at llg.trashbin.MainActivity$communicationEnabled.MessageSent(MainActivity.java:103)
at llg.trashbin.MainActivity$2.onClick(MainActivity.java:71)
at android.view.View.performClick(View.java:5702)
at android.widget.TextView.performClick(TextView.java:10888)
at android.view.View$PerformClick.run(View.java:22541)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
</code></pre>

<p>Edit :</p>

<p>I have put the code of sentData function into an if/else statement in order to check if the assigned string were null :</p>

<pre><code>public void sendData(String message) {
    if (message != null) {
        Log.d(TAG, "sent data isn't null !");
        byte[] msgBuffer = message.getBytes();
        Log.d(TAG, "...Sending data: " + message + "...");
        try {
            outStream.write(msgBuffer);
        } catch (IOException e) {
            String msg = "In onResume() and an exception occurred during write: " + e.getMessage();
            if (address.equals("00:13:EF:00:00:4C"))
                msg = msg + ".\n\nUpdate your server address from 00:13:EF:00:00:4C to the correct address on line 37 in the java code";
            msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n";

            //errorExit("Fatal Error", msg);
        }
    }
    else {
        Log.d(TAG, "sent data is null !");
    }
}
</code></pre>

<p>And I had a positif result : the assigned string weren't null !</p>

<p>Here is the debug window :</p>

<pre><code>12-27 12:53:24.661 8183-8183/llg.trashbin D/Tripoubelle: sent data isn't null !
</code></pre>