蓝牙代码不起作用

时间:2014-04-16 14:21:35

标签: android bluetooth fatal-error

我试过这段代码。但每次我按下按钮都会崩溃,我在LogCat中看到了:

致命的例外:主要 java.lang.NullPointer异常

虽然尝试此代码的每个人都说它非常完美!

任何人都有同样的问题吗?

谢谢!

这是代码:

package com.example.bluetoothexample;

 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 BluetoothExampleActivity 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.activity_bluetooth_example);

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.setText("Bluetooth Closed");
}
 }

和.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:ignore="TextFields,HardcodedText" >

<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Type here:" />

<EditText
android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label"
android:background="@android:drawable/editbox_background" />

<Button
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/entry"
android:layout_marginLeft="10dip"
android:text="Open" />

<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/open"
android:layout_toLeftOf="@id/open"
android:text="Send" />

<Button
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/send"
android:layout_toLeftOf="@id/send"
android:text="Close" />

</RelativeLayout>

编辑:

这是堆栈跟踪trevor-e询问(推送openButton之后):

04-16 18:24:10.919: V/Provider/Settings(13223): invalidate [system]: current 26 != cached 0
04-16 18:24:10.926: V/Provider/Settings(13223): from db cache, name = sound_effects_enabled , value = 0
04-16 18:24:10.941: D/AndroidRuntime(13223): Shutting down VM
04-16 18:24:10.941: W/dalvikvm(13223): threadid=1: thread exiting with uncaught exception (group=0x411a89a8)
04-16 18:24:10.947: E/AndroidRuntime(13223): FATAL EXCEPTION: main
04-16 18:24:10.947: E/AndroidRuntime(13223): java.lang.NullPointerException
04-16 18:24:10.947: E/AndroidRuntime(13223):    at com.example.bluetoothexample.BluetoothExampleActivity.openBT(BluetoothExampleActivity.java:120)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at com.example.bluetoothexample.BluetoothExampleActivity$1.onClick(BluetoothExampleActivity.java:55)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.view.View.performClick(View.java:4211)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.view.View$PerformClick.run(View.java:17446)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.os.Handler.handleCallback(Handler.java:725)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.os.Looper.loop(Looper.java:153)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at android.app.ActivityThread.main(ActivityThread.java:5297)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at java.lang.reflect.Method.invokeNative(Native Method)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at java.lang.reflect.Method.invoke(Method.java:511)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-16 18:24:10.947: E/AndroidRuntime(13223):    at dalvik.system.NativeStart.main(Native Method)
04-16 18:24:11.009: I/Process(13223): Sending signal. PID: 13223 SIG: 9

0 个答案:

没有答案