0

整数、文字列、または文字の転送に使用できる単純なクライアント/サーバー アプリケーションを作成しています。

アプリケーションは正常にコンパイルされましたが、クライアント サーバー接続がありません。サーバーを検索しようとすると、行に 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 は既にここに表示されています。

4

0 に答える 0