1

私のアプリが起動すると、他のすべての機能は正常に動作しますが、BluetoothボタンをタップしてBluetoothをオンにすると、アプリがクラッシュして停止したことが示されます。ご迷惑をおかけし、ブルートゥースコード全体を貼り付けることはできません。私の最初のブルートゥースを使用してアンドロイドデベロッパーで新しくなった私はどこに間違っていたのか分かりません。どんな助けも大歓迎です。Bluetooth接続が起動するとクラッシュする

はここであなたに

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()); 
     } 
    } 

をありがとうまたBluetoothのスレッドlogcatを表示したい人のために

public class ConnectThread extends Thread { 
private BluetoothSocket BTsocket; 
private final BluetoothDevice mDevice; 
private final BluetoothAdapter b_adapter = BluetoothAdapter.getDefaultAdapter(); 
private final Handler mHandler; 

public ConnectThread(String deviceID, Handler handler) { 
    mDevice = b_adapter.getRemoteDevice(deviceID); 
    mHandler = handler; 
    try { 
     BTsocket = mDevice.createRfcommSocketToServiceRecord(BluetoothActivity.APP_UUID); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
} 
public void run() { 
    b_adapter.cancelDiscovery(); 
    try { 
     BTsocket.connect(); 
     manageConnectedSocket(); 
    } catch (IOException connectException) {  
     try { 
      BTsocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private void manageConnectedSocket() { 
    ConnectionThread conn = new ConnectionThread(BTsocket, mHandler); 
    mHandler.obtainMessage(BluetoothActivity.SOCKET_CONNECTED, conn).sendToTarget(); 
    conn.start(); 
} 
public void cancel() { 
    try { 
     BTsocket.close(); 
    }catch(IOException e){ 

    } 
} 

}

です。ここにそれがあります。

.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)  
+0

あなたはアンドロイドマニフェストファイルで必要な権限を持っていますか? – Riskhan

+0

あなたの 'Logcat'も投稿してください – Rehan

+0

@変更内容を確認してください:) – kiwilifter

答えて

0

あなたBluetoothAdapterが適切に初期化されないことがあります。 LogCatを確認すると、Bluetoothがサポートされていません。メッセージが情報タグに表示されます。今すぐあなたのActivityNullPointerExceptionを避けるために、このようにコードを変更します。

@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_adapternullであれば、それはそれを使用して行を実行してはいけません。 finishをクリアするには、その隣の行をスキップしないでください。だから、あなたはそれを自分で行う必要があります。

+0

ありがとうございました。間違いなく停止した問題を取り除いた:) – kiwilifter

関連する問題