-1

I have to get data from a bluetooth device which is not a android device to a android phone. So as a receiver in android phone i have made a app to receive data from the bluetooth device . I followed a tutorial from a post's answer from here here enter link description here

But i am getting NullPointerException. Could anyone tell me why i am getting this exception and Could anyone tell me how to solve this exception in that code???

My code were:

    package Android.Arduino.Bluetooth;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;  
import android.widget.Button;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends Activity
{
TextView myLabel;
EditText myTextbox;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button openButton = (Button)findViewById(R.id.open);
    Button sendButton = (Button)findViewById(R.id.send);
    Button closeButton = (Button)findViewById(R.id.close);
    myLabel = (TextView)findViewById(R.id.label);
    myTextbox = (EditText)findViewById(R.id.entry);

     //Open Button
        openButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                try 
                {
                    findBT();
                    openBT();
                }
                catch (IOException ex) { }
            }
        });

        //Send Button
        sendButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                try 
                {
                    sendData();
                }
                catch (IOException ex) { }
            }
        });

        //Close button
        closeButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                try 
                {
                    closeBT();
                }
                catch (IOException ex) { }
            }
        });
    }

    void findBT()
    {
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if(mBluetoothAdapter == null)
        {
            myLabel.setText("No bluetooth adapter available");
        }

        if(!mBluetoothAdapter.isEnabled())
        {
            Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBluetooth, 0);
        }

        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if(pairedDevices.size() > 0)
        {
            for(BluetoothDevice device : pairedDevices)
            {
                if(device.getName().equals("MattsBlueTooth")) 
                {
                    mmDevice = device;
                    break;
                }
            }
        }
        myLabel.setText("Bluetooth Device Found");
    }

    void openBT() throws IOException
    {
        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //Standard SerialPortService ID
        mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);        
        mmSocket.connect();
        mmOutputStream = mmSocket.getOutputStream();
        mmInputStream = mmSocket.getInputStream();

        beginListenForData();

        myLabel.setText("Bluetooth Opened");
    }

    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()
                                        {
                                            myLabel.setText(data);
                                        }
                                    });
                                }
                                else
                                {
                                    readBuffer[readBufferPosition++] = b;
                                }
                            }
                        }
                    } 
                    catch (IOException ex) 
                    {
                        stopWorker = true;
                    }
               }
            }
        });

        workerThread.start();
    }

    void sendData() throws IOException
    {
        String msg = myTextbox.getText().toString();
        msg += "\n";
        mmOutputStream.write(msg.getBytes());
        myLabel.setText("Data Sent");
    }

    void closeBT() throws IOException
    {
        stopWorker = true;
        mmOutputStream.close();
        mmInputStream.close();
        mmSocket.close();
        myLabel.s`enter code here`etText("Bluetooth Closed");
    }
    }

My logs:

07-01 12:03:16.474: E/AndroidRuntime(4301): FATAL EXCEPTION: main
07-01 12:03:16.474: E/AndroidRuntime(4301): java.lang.NullPointerException
07-01 12:03:16.474: E/AndroidRuntime(4301):     at com.example.blu1.MainActivity.openBT(MainActivity.java:126)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at com.example.blu1.MainActivity$1.onClick(MainActivity.java:61)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.view.View.performClick(View.java:4212)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.view.View$PerformClick.run(View.java:17476)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.os.Handler.handleCallback(Handler.java:800)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.os.Handler.dispatchMessage(Handler.java:100)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.os.Looper.loop(Looper.java:194)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at android.app.ActivityThread.main(ActivityThread.java:5371)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at java.lang.reflect.Method.invoke(Method.java:525)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-01 12:03:16.474: E/AndroidRuntime(4301):     at dalvik.system.NativeStart.main(Native Method)
Community
  • 1
  • 1

2 Answers2

0

It's tough to tell what line 126 is without counting but a quick estimate is that it falls under your TextView setText assignment. If this is correct, then be sure that you are actually finding the text view inside your layout file correctly.

If it is not this line then perhaps an update with the highlighted line in question for line 126 where the Nullpointer occurs would be helpful.

This could be due to you loading a layout file you didn't mean to load or are referencing the wrong name for the TextView.

Jay Snayder
  • 4,298
  • 4
  • 27
  • 53
0

IMO the issue could be with following lines of code inside the function findBT().

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    if(pairedDevices.size() > 0)
    {
        for(BluetoothDevice device : pairedDevices)
        {
            if(device.getName().equals("MattsBlueTooth")) 
            {
                mmDevice = device;
                break;
            }
        }
    }

Most likely the 'mmDevice' is not getting initialized. Ensure the name "MattsBlueTooth" is the name appearing in the paired devices list. Else use the one among the paired devices list. That means you must pair your BlueTooth device with android handset or tablet first.

SunGa
  • 231
  • 3
  • 10