質問編集履歴

1 era

TASKsan

TASKsan score 7

2019/01/10 20:41  投稿

androidstudio ボタン onClick時のエラー
今androidstudioに設置されているボタンを押すとエラーが出て端末が落ちてしまいます。
エラーはしたのように出ています。
```androidstudio
       // キャラクタリスティックが書き込まれたときの処理
       @Override
       public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
           if (BluetoothGatt.GATT_SUCCESS != status) {
               return;
           }
           // キャラクタリスティックごとに個別の処理
           if (UUID_CHARACTERISTIC_PRIVATE2.equals(characteristic.getUuid())) {   
               runOnUiThread(new Runnable() {
                   public void run() {
                   }
               });
               return;
           }
       }
   };
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       mButton_go = (Button) findViewById(R.id.go);
       mButton_go.setOnClickListener(this);
       mButton_go.setOnLongClickListener(this);
       mButton_back = (Button) findViewById(R.id.back);
       mButton_back.setOnClickListener(this);
       mButton_back.setOnLongClickListener(this);
       mButton_left = (Button) findViewById(R.id.left);
       mButton_left.setOnClickListener(this);
       mButton_left.setOnLongClickListener(this);
       mButton_right = (Button) findViewById(R.id.right);
       mButton_right.setOnClickListener(this);
       mButton_right.setOnLongClickListener(this);
       mButton_back.setEnabled(false);
       mButton_go.setEnabled(false);
       mButton_left.setEnabled(false);
       mButton_right.setEnabled(false);
       // Android端末がBLEをサポートしてるかの確認
       if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
           Toast.makeText(this, R.string.ble_is_not_supported, Toast.LENGTH_SHORT).show();
           finish();   // アプリ終了宣言
           return;
       }
       // Bluetoothアダプタの取得
       BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
       mBluetoothAdapter = bluetoothManager.getAdapter();
       if (null == mBluetoothAdapter) {   // Android端末がBluetoothをサポートしていない
           Toast.makeText(this, R.string.bluetooth_is_not_supported, Toast.LENGTH_SHORT).show();
           finish();   // アプリ終了宣言
           return;
       }
   }
   // 初回表示時、および、ポーズからの復帰時
   @Override
   protected void onResume() {
       super.onResume();
       // Android端末のBluetooth機能の有効化要求
       requestBluetoothFeature();
       if (!mDeviceAddress.equals("")) {
       }
       // 接続ボタンを押す
       connect();
   }
   // 別のアクティビティ(か別のアプリ)に移行したことで、バックグラウンドに追いやられた時
   @Override
   protected void onPause() {
       super.onPause();
       // 切断
       disconnect();
   }
   // アクティビティの終了直前
   @Override
   protected void onDestroy() {
       super.onDestroy();
       if (null != mBluetoothGatt) {
           mBluetoothGatt.close();
           mBluetoothGatt = null;
       }
   }
   // Android端末のBluetooth機能の有効化要求
   private void requestBluetoothFeature() {
       if (mBluetoothAdapter.isEnabled()) {
           return;
       }
       // デバイスのBluetooth機能が有効になっていないときは、有効化要求(ダイアログ表示)
       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
       startActivityForResult(enableBtIntent, REQUEST_ENABLEBLUETOOTH);
   }
   // 機能の有効化ダイアログの操作結果
   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       switch (requestCode) {
           case REQUEST_ENABLEBLUETOOTH: // Bluetooth有効化要求
               if (Activity.RESULT_CANCELED == resultCode) {   // 有効にされなかった
                   Toast.makeText(this, R.string.bluetooth_is_not_working, Toast.LENGTH_SHORT).show();
                   finish();   // アプリ終了宣言
                   return;
               }
               break;
           case REQUEST_CONNECTDEVICE: // デバイス接続要求
               String strDeviceName;
               if (Activity.RESULT_OK == resultCode) {
                   // デバイスリストアクティビティからの情報の取得
                   strDeviceName = data.getStringExtra(DeviceListActivity.EXTRAS_DEVICE_NAME);
                   mDeviceAddress = data.getStringExtra(DeviceListActivity.EXTRAS_DEVICE_ADDRESS);
               } else {
                   strDeviceName = "";
                   mDeviceAddress = "";
               }
               ((TextView) findViewById(R.id.textview_devicename)).setText(strDeviceName);
               ((TextView) findViewById(R.id.textview_deviceaddress)).setText(mDeviceAddress);
               break;
       }
       super.onActivityResult(requestCode, resultCode, data);
   }
   // オプションメニュー作成時の処理
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.activity_main, menu);
       return true;
   }
   // オプションメニューのアイテム選択時の処理
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
           case R.id.menuitem_search:
               Intent devicelistactivityIntent = new Intent(this, DeviceListActivity.class);
               startActivityForResult(devicelistactivityIntent, REQUEST_CONNECTDEVICE);
               return true;
       }
       return false;
   }
   @Override
   public boolean onLongClick(View v){
       if(mButton_go.getId()==v.getId()){
         Log.d("s", "onLongClick:go ");
           writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"go");
       }
       if(mButton_back.getId()==v.getId()){
           writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"back");
       }
       if(mButton_right.getId()==v.getId()){
           writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"right");
       }
       if(mButton_left.getId()==v.getId()){
           writeCharacteristic(UUID_SERVICE_PRIVATE,UUID_CHARACTERISTIC_PRIVATE2,"left");
       }
       return false;
   }
   @Override
   public void onClick(View v) {
       if (mButton_go.getId() == v.getId()) {
           Log.d("a", "onClick: ");
           writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop");
       }
       if (mButton_back.getId() == v.getId()) {
           writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop");
       }
       if (mButton_left.getId() == v.getId()) {
           writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop");
       }
       if (mButton_right.getId() == v.getId()) {
           writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "stop");
       }
   }
   // 接続
   private void connect() {
       if (mDeviceAddress.equals("")) {   // DeviceAddressが空の場合は処理しない
           return;
       }
       if (null != mBluetoothGatt) {   // mBluetoothGattがnullでないなら接続済みか、接続中。
           return;
       }
       // 接続
       BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);
       mBluetoothGatt = device.connectGatt(this, false, mGattcallback);
   }
   // 切断
   private void disconnect() {
       if (null == mBluetoothGatt) {
           return;
       }
       mBluetoothGatt.close();
       mBluetoothGatt = null;
   }
   // キャラクタリスティックの書き込み
   private void writeCharacteristic(UUID uuid_service, UUID uuid_characteristic, String string) {
       if (null == mBluetoothGatt) {
           return;
       }
       BluetoothGattCharacteristic blechar = mBluetoothGatt.getService(uuid_service).getCharacteristic(uuid_characteristic);
       blechar.setValue(string);
       mBluetoothGatt.writeCharacteristic(blechar);
   }
```
```エラー
```Er
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.ble_test01, PID: 21383
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothGattCharacteristic.setValue(java.lang.String)' on a null object reference
                                                                           at com.example.ble_test01.MainActivity.writeCharacteristic(MainActivity.java:472)
                                                                           at com.example.ble_test01.MainActivity.onClick(MainActivity.java:385)
                                                                           at android.view.View.performClick(View.java:5611)
                                                                           at android.view.View$PerformClick.run(View.java:22278)
                                                                           at android.os.Handler.handleCallback(Handler.java:751)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:159)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6097)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
```
  • Android

    8109 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4913 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る