Android 蓝牙连接在启动时崩溃

Android 蓝牙连接在启动时崩溃,android,bluetooth,android-bluetooth,android-developer-api,Android,Bluetooth,Android Bluetooth,Android Developer Api,当我的应用程序启动时,所有其他功能都可以正常工作,但当点击蓝牙按钮打开蓝牙时,应用程序崩溃并说它已停止。很抱歉,这是个麻烦,请粘贴整个蓝牙代码。这是我第一次使用蓝牙,而且还是安卓开发者的新手,我不太确定我哪里出了问题。。非常感谢您的帮助 多谢各位 public class BluetoothActivity extends Activity { private static final String TAG = "BluetoothActivity"; private static final

当我的应用程序启动时,所有其他功能都可以正常工作,但当点击蓝牙按钮打开蓝牙时,应用程序崩溃并说它已停止。很抱歉,这是个麻烦,请粘贴整个蓝牙代码。这是我第一次使用蓝牙,而且还是安卓开发者的新手,我不太确定我哪里出了问题。。非常感谢您的帮助

多谢各位

public class BluetoothActivity extends Activity {

private static final String TAG = "BluetoothActivity";
private static final int BLUETOOTH_REQUEST = 0;
private static final int SELECT_SERVER = 1;
public static final int DATA_RECEIVED = 3;
public static final int SOCKET_CONNECTED = 4;

public static final UUID APP_UUID = UUID
        .fromString("ad7b8520-f5fa-11e4-b939-0800200c9a66");
private Button on;
private Button off;
private Button server;
private Button client;
private TextView tv = null;

private BluetoothAdapter b_adapter = null;
private ConnectionThread bluetoothConnect = null;
private String data;
private boolean mServerMode;

private TextView text;
private ListView pairedList;
private Set<BluetoothDevice> pairedDevices;
private ArrayAdapter<String> BTArrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    b_adapter = BluetoothAdapter.getDefaultAdapter();
    if (b_adapter == null) {
        Log.i(TAG, "Bluetooth not supported");
        finish();
    }

    setContentView(R.layout.activity_bluetooth);
    tv = (TextView) findViewById(R.id.textView1);
    server = (Button) findViewById(R.id.server);
    server.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            startAsServer();
            mServerMode = true;
        }
    });

    client = (Button) findViewById(R.id.client);
    client.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            selectServer();
        }
    });

    if (!b_adapter.isEnabled()) {
        Intent enableBluetoothIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBluetoothIntent, BLUETOOTH_REQUEST);
    } else {
        setButtonsEnabled(true);
    }

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == BLUETOOTH_REQUEST && resultCode == RESULT_OK) {
        setButtonsEnabled(true);
    } else if (requestCode == SELECT_SERVER && resultCode == RESULT_OK) {
        BluetoothDevice device = data.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        connectToBluetoothServer(device.getAddress());
    }
}

private void startAsServer() {
    setButtonsEnabled(false);
    new AcceptThread(mHandler).start();
}

private void selectServer() {
    setButtonsEnabled(false);
    Set<BluetoothDevice> pairedDevices = b_adapter.getBondedDevices();
    ArrayList<String> pairedDeviceString = new ArrayList<String>();
    if (pairedDevices.size() > 0) {
        for (BluetoothDevice device : pairedDevices) {
            pairedDeviceString.add(device.getName() + "\n"
                    + device.getAddress());
        }
    }
}

对于那些想要查看日志的人。在下面

.BluetoothActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothAdapter.isEnabled()' on a null object reference
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
  at android.app.ActivityThread.-wrap11(ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothAdapter.isEnabled()' on a null object reference
  at com.kenpar.dmsassign2.BluetoothActivity.onCreate(BluetoothActivity.java:80)
  at android.app.Activity.performCreate(Activity.java:6237)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
  at android.os.Handler.dispatchMessage(Handler.java:102) 
  at android.os.Looper.loop(Looper.java:148) 
  at android.app.ActivityThread.main(ActivityThread.java:5417) 
  at java.lang.reflect.Method.invoke(Native Method) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

这是因为您的
BluetoothAdapter
可能未正确初始化。检查您的
LogCat
,您应该会在信息标签中看到不支持蓝牙的消息。现在,为了避免
活动中出现
NullPointerException
,请将代码更改为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    b_adapter = BluetoothAdapter.getDefaultAdapter();
    if (b_adapter == null) {
        Log.i(TAG, "Bluetooth not supported");
        // Show proper message here
        finish();
    } else {
        setContentView(R.layout.activity_bluetooth);
        tv = (TextView) findViewById(R.id.textView1);
        server = (Button) findViewById(R.id.server);
        server.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                startAsServer();
                mServerMode = true;
            }
        });

        client = (Button) findViewById(R.id.client);
        client.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectServer();
            }
        });

        if (!b_adapter.isEnabled()) {
            Intent enableBluetoothIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBluetoothIntent, BLUETOOTH_REQUEST);
        } else {
            setButtonsEnabled(true);
        }
    }
}

原因是:如果您的
b_适配器
null
,则不应使用它执行行。为了清楚起见,
finish
不会跳过它旁边的行。所以你必须自己做。

你能在android清单文件中拥有必要的权限吗?发布你的
Logcat
too@Rehan请参阅所做的更改:)谢谢。这无疑消除了已停止的问题:)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    b_adapter = BluetoothAdapter.getDefaultAdapter();
    if (b_adapter == null) {
        Log.i(TAG, "Bluetooth not supported");
        // Show proper message here
        finish();
    } else {
        setContentView(R.layout.activity_bluetooth);
        tv = (TextView) findViewById(R.id.textView1);
        server = (Button) findViewById(R.id.server);
        server.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                startAsServer();
                mServerMode = true;
            }
        });

        client = (Button) findViewById(R.id.client);
        client.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                selectServer();
            }
        });

        if (!b_adapter.isEnabled()) {
            Intent enableBluetoothIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBluetoothIntent, BLUETOOTH_REQUEST);
        } else {
            setButtonsEnabled(true);
        }
    }
}