Search code examples
javaandroidbluetoothandroid-arrayadapter

Problems while following the Bluetooth Tutorial with ArrayAdapter


I am following the right now the google bluetooth tutorial and got stucked with the ArrayAdapter.

Basically i want to list paired and found bluetooth devices.

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.add(java.lang.Object)' on a null object reference
        at eighttech.eu.obd2_8scan.fragments.FragmentBluetooth.onCreateView(FragmentBluetooth.java:44)

Here is the code:

public class FragmentBluetooth extends Fragment {

public FragmentBluetooth(){}

private ArrayAdapter<String> mArrayAdapter;
BluetoothAdapter mBluetoothAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_bluetooth, container, false);

    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
     if (mBluetoothAdapter.isEnabled()) {
        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        // If there are paired devices
        if (pairedDevices.size() > 0) {
            mArrayAdapter.add("Paired devices");
            // Loop through paired devices
            for (BluetoothDevice device : pairedDevices) {
                // Add the name and address to an array adapter to show in a ListView
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
            mArrayAdapter.add("Discovered devices");


            // Register the BroadcastReceiver
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            getActivity().registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

            mBluetoothAdapter.startDiscovery();

            ListView listView = (ListView) rootView.findViewById(R.id.ListPairedDevices);
            listView.setAdapter(mArrayAdapter);
        }
    }

    return rootView;
}

final BroadcastReceiver mReceiver = new BroadcastReceiver() {   // Create a BroadcastReceiver for ACTION_FOUND
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {      // When discovery finds a device
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
};

@Override
public void onResume() {
    super.onResume();

    IntentFilter intentFilter = new IntentFilter();
    getActivity().registerReceiver(mReceiver, intentFilter);
}

@Override
public void onPause() {
    super.onPause();
    getActivity().unregisterReceiver(mReceiver);
}

}

I don't know how to solve this and didn't found a solution for my problem.


Solution

  • Add this before adding items to arrayadapter:

    mArrayAdapter = new ArrayAdapter<String>();