整数、文字列、または文字の転送に使用できる単純なクライアント/サーバー アプリケーションを作成しています。
アプリケーションは正常にコンパイルされましたが、クライアント サーバー接続がありません。サーバーを検索しようとすると、行に NullPointerException が表示されます
bluetooth.startDiscovery();
ただし、サーバーを起動すると、例外は発生しません。
また、あるデバイスでサーバーを起動し、別のデバイスでサーバーを検索すると、サーバーが正常に動作しているか、クライアントに問題があるため、接続が確立されません。
を使用して BluetoothAdapter のインスタンスを既に取得しています
bluetooth = BluetoothAdapter.getDefaultAdapter();
onclickListener 内でメソッド startDiscovery() を呼び出しているため、おそらく null ポインターが指定されていると思います。
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());
}
}
}
}
誰かが私に何が問題なのか教えてもらえますか? 2 つのボタンを使用しています。1 つは Bluetooth サーバーを起動するため、もう 1 つは Bluetooth サーバーを検索するためです。[Bluetooth サーバーの開始] ボタンをクリックして実行されるメソッドは、startActivityForResult をトリガーし、その結果、次に示すようにメソッド onActivityResult が実行されます。検索サーバー ボタンの OnClickListener は既にここに表示されています。