我正在制作一个简单的客户端-服务器应用程序,可用于传输整数、字符串或字符。
我的应用程序编译成功,但没有客户端-服务器连接。当我尝试搜索服务器时,它会给出 NullPointerException 就行了
bluetooth.startDiscovery();
但是,当我启动服务器时,它也不例外。
此外,当我在一台设备上启动服务器并在另一台设备上查找服务器时,由于服务器正常运行的问题或客户端的问题,无法建立连接。
我已经有了一个使用蓝牙适配器的实例
bluetooth = BluetoothAdapter.getDefaultAdapter();
我认为可能给出了一个空指针,因为我在 onclickListener 中调用了 startDiscovery() 方法,这个,
private void setupSearchButton() {
Button searchButton = (Button) findViewById(R.id.button_search);
searchButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));
if (!bluetooth.isDiscovering()) {
try { foundDevices.clear();
bluetooth.startDiscovery(); } catch(Exception e)
{
Context c = getApplicationContext();
Toast.makeText(c, e.toString(),Toast.LENGTH_LONG).show();
}
}
}
});
}
声明服务器的代码发布在这里:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DISCOVERY_REQUEST) {
boolean isDiscoverable = resultCode > 0;
if (isDiscoverable) {
String name = "bluetoothserver";
try {
final BluetoothServerSocket btserver = bluetooth.listenUsingRfcommWithServiceRecord(name, uuid);
AsyncTask<Integer, Void, BluetoothSocket> acceptThread = new AsyncTask<Integer, Void, BluetoothSocket>() {
@Override
protected BluetoothSocket doInBackground(Integer... params) {
try {
socket = btserver.accept(params[0] * 1000);
return socket;
} catch (Exception e) {
Log.d("BLUETOOTH SERVER EXCEPTION : ", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(BluetoothSocket result) {
if (result != null) {
switchUI();
}
}
};
acceptThread.execute(resultCode);
} catch (IOException e) {
Log.d("BLUETOOTH", e.getMessage());
}
}
}
}
有人可以告诉我有什么问题吗?我正在使用两个按钮,一个用于启动蓝牙服务器,另一个用于搜索蓝牙服务器。单击启动蓝牙服务器按钮时运行的方法会触发 startActivityForResult,结果会执行 onActivityResult 方法,如下所示。搜索服务器按钮的 OnClickListener 已在此处显示。